【发布时间】:2015-05-21 15:31:05
【问题描述】:
我想在一个视图中向 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];
但这里的问题是,当应用程序启动时,我可以第一次将元素添加到数组中,并且它也反映在第二个视图中。但是当我第二次按下完成按钮时,我收到一个 NSException 错误说:
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object”
【问题讨论】:
-
我不会使用 NSUserDefaults 在视图之间传递数据。如果视图没有由它们维护的关系(例如,相互引用),那么至少创建一个中间对象来为它们保存数据。
标签: ios nsmutablearray nsuserdefaults