4 Haziran 2013

NSMutableDictionary’den eleman silmek

ile hasan

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];
}