NSMutableDictionary’den eleman silmek
Objective-C’de NSMutableDictionary tipindeki bir değişkenden [dict removeObjectForKey:key] fonksiyonu ile eleman silinir. Eğer bu işlemi yaparken
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSDictionaryM: 0x92c50b0> was mutated while being enumerated.'
hatası alıyorsanız; bir iterasyon sırasında yani NSMutableDictionary tipindeki değişkenin elemanları üzerinde döngü ile dolaşırken bu işi yapmaya kalkıyorsunuz demektir.
for (NSString* key in dict) { if([key isEqualToString:@"silinecek_key"]) [dict removeObjectForKey:key]; //iterasyon içerisinde bu işlem yapılmaz! }
Bu hatayı engellemek için döngü içerisinde hangi öğelerin silineceğini bir dizide tutmalı ve döngü sonrasında bu elemanları değişkenden çıkarmalıyız. İkinci bir yol olarak da NSMutableDictionary tipindeki değişkenin üzerinde değil, [dict allKeys] ile bu değişkenin key’lerinin olduğu dizi üzerinde dolaşmalı ve gerekli kontrolleri bu döngüde yapıp silmek istediğimiz elemanı yine [dict removeObjectForKey:key] fonksiyonu ile silmeliyiz.
for (NSString* key in [dict allKeys]) { if([key isEqualToString:@"silinecek_key"]) [dict removeObjectForKey:key]; }