2015-05-21 98 views
0

我想在一个视图中将元素添加到NSMutableArray,并且该数组应该反映在另一个视图中。 我使用NSUserDefaults的技术用于这一目的..将NSMutable数组从一个视图传递到另一个视图

这里是我的代码:

查看添加元素

- (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错误说:

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

+1

我不会使用到NSUserDefaults的从视图中查看传递数据。如果视图之间没有任何关系(例如,彼此之间的关系),那么至少要创建一个中间对象来为他们保存数据。 –

回答

1

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

更改此:

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

到:

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

嗨rmaddy,这是非常有用的,但在我的情况下,它不工作。问题是一样的,事实上,即使数组也停止更新,这是很好的。有什么建议么 ? –

+0

哦,它的工作..我也改变了self.arrayy = [默认objectForKey:@“ARR”]; self.arrayy = [[defaults objectForKey:@“arr”] mutableCopy]; 谢谢。 –

相关问题