当我尝试将对象插入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];
答案 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?