2011-10-18 65 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

相关问题