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

Passing NSMutable array from one view to another

我想在一个视图中向 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];

但这里的问题是,当应用程序启动时,我能够第一次将元素添加到数组中,并且它反映在第二个视图中 too.But 第二次当我按下完成按钮时,我得到一个 NSException 错误说:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'

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

改变这个:

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

至:

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