将NSMutable数组从一个视图传递到另一个视图

时间:2015-05-21 15:31:06

标签: ios nsmutablearray nsuserdefaults

我想在一个视图中向NSMutableArray添加一个元素,该数组应该反映在另一个视图中。 我正在使用NSuserDefaults技术..

这是我的代码:

添加元素的视图

- (IBAction)donebutton:(id)sender {
NSUserDefaults *defaults = [NSUserDefaults new];

if ([defaults objectForKey:@"arr"]) {
    self.arrayy = [defaults objectForKey:@"arr"];
}
else {
    self.arrayy = [NSMutableArray new];
}

[self.arrayy addObject:self.titlefield.text];

[defaults setObject:self.arrayy forKey:@"arr"];

[defaults synchronize];

}

查看以显示所有这些数组

//in view did load..//

NSUserDefaults *defaults = [NSUserDefaults new];

if ([defaults objectForKey:@"arr"]) {
    self.data_array = [defaults objectForKey:@"arr"];
}
else {
    self.data_array = [NSMutableArray new];
}

[defaults synchronize];

但是这里的问题是当app启动时我能够第一次将元素添加到数组中,并且它也反映在第二个视图中。但是当我按下完成按钮时,我第二次收到NSException错误说:

  

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:' - [__ NSCFArray insertObject:atIndex:]:发送到不可变对象的变异方法'

1 个答案:

答案 0 :(得分:1)

您没有NSMutableArray,而是NSArray。您从NSUserDefaults读取的任何内容都将是不可变的。

改变这个:

self.data_array = [defaults objectForKey:@"arr"];

为:

self.data_array = [[defaults objectForKey:@"arr"] mutableCopy];