'将对象插入NSMutableArray时,程序收到信号:SIGABRT'

时间:2011-10-18 21:54:50

标签: iphone objective-c nsmutablearray sigabrt

当我尝试将对象插入NSMutableArray时,我收到“程序收到信号:SIGABRT”错误,但我不明白为什么。

这是我的代码,特别是导致错误的insertObject:value

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

2 个答案:

答案 0 :(得分:7)

NSUserDefaults返回的值是不可变的,即使您将可变对象设置为值也是如此。

NSUserDefaults检索数组后,您需要制作一个可变副本。幸运的是,NSArray符合NSMutableCopying协议,因此您只需向数组发送mutableCopy消息:

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

请注意,您拥有mutableCopy根据Memory Management Rules返回的对象。换句话说,你需要在完成后释放它。

答案 1 :(得分:0)

您必须使用NSData保存和检索数组。可能重复。

Possible to save an integer array using NSUserDefaults on iPhone?