2011-10-18 85 views
1

當我嘗試向我的NSMutableArray插入一個對象時,出現'程序接收信號:SIGABRT'錯誤,但我不明白爲什麼。當向NSMutableArray插入對象時'程序接收信號:SIGABRT'

這是我的代碼,特別是它導致錯誤的insertObject:value。從NSUserDefaults返回

NSMutableDictionary *myDictionary = [NSMutableDictionary dictionary]; 
[myDictionary setValue:valueName.text forKey:kValueName]; 
[myDictionary setObject:subValuesList forKey:kSubValuesList]; 

MyAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
int position = appDelegate.position; 

NSMutableArray *valuesList = [[NSUserDefaults standardUserDefaults] objectForKey:kValuesArray]; 
[valuesList insertObject:myDictionary atIndex:position]; 

回答

7

值是不可改變的,即使你設置了可變對象的值。

NSUserDefaults檢索數組後,您需要製作一個可變副本。幸運的是,NSArray符合NSMutableCopying協議,所以你只需要發送一個mutableCopy消息數組:

NSMutableArray *valuesList = [[[NSUserDefaults standardUserDefaults] objectForKey:kValuesArray] mutableCopy]; 

請您自己的工作mutableCopy按照該Memory Management Rules返回的對象頭腦。換句話說,當你完成它時你需要釋放它。

+1

謝謝!自很久以來一直在類似的問題上苦苦掙扎... – iOSDev

相關問題