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

The*_*imp 2 iphone objective-c nsmutablearray sigabrt

当我尝试向NSMutableArray插入一个对象时,我收到一个'Program received signal: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];
Run Code Online (Sandbox Code Playgroud)

alb*_*amg 7

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

从中检索数组后,您需要创建一个可变副本NSUserDefaults.幸运的是,NSArray符合NSMutableCopying协议,所以你只需要向mutableCopy数组发送一条消息:

NSMutableArray *valuesList = [[[NSUserDefaults standardUserDefaults] objectForKey:kValuesArray] mutableCopy];
Run Code Online (Sandbox Code Playgroud)

请记住,您拥有mutableCopy根据内存管理规则返回的对象.换句话说,您需要在完成后释放它.