【问题标题】:Passing NSMutable array from one view to another将 NSMutablearray 从一个视图传递到另一个视图
【发布时间】: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


【解决方案1】:

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

改变这个:

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

到:

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

【讨论】:

  • 嗨 rmaddy,这真的很有帮助,但在我的情况下它不起作用。问题是一样的,事实上现在连数组也停止更新,这在以前很好。有什么建议吗?
  • 哦,它起作用了..我也改变了 self.arrayy = [defaults objectForKey:@"arr"]; to self.arrayy = [[defaults objectForKey:@"arr"] mutableCopy];谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-20
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-23
相关资源
最近更新 更多