变异方法发送到不可变对象,而对象是Mutiable

问题描述:

我定义我的可变对象为变异方法发送到不可变对象,而对象是Mutiable

NSMutableArray *scribbles; 

然后在viewDidLoad我初始化它

scribbles = [[NSMutableArray alloc] init]; 

取我的第一个JSON页面后,我加数据输入到它

scribbles = JSON[@"scribbles"]; 

然后稍后我加载第二页,我尝试添加更多的d ATA到我的数组

NSMutableArray *mutableJson = [JSON[@"scribbles"] mutableCopy]; 
[scribbles addObjectsFromArray:mutableJson]; 

,但应用程序崩溃,并给了我一个mutating method sent to immutable object错误。

你应该这样做:

scribbles = [JSON[@"scribbles"] mutableCopy]; 

你并不需要做第二页的可变副本,所以后来只是此操作:

[scribbles addObjectsFromArray:JSON[@"scribbles"]]; 

为了解释:

scribbles = [[NSMutableArray alloc] init]; // mutable, OK 
scribbles = JSON[@"scribbles"]; // immutable, you have to make mutable copy 
[scribbles addObjectsFromArray:mutableJson]; // scribbles was immutable, the parameter doesn't need to be mutable 
+0

:)这使得这么多sense.Thank你! S.O.会尽快接受你的回答。让我 – Jonathan 2013-03-11 09:46:53

scribbles = JSON[@"scribbles"]; 

此行使您的涂鸦对象不可变。您需要添加对象,而不是分配。如果您有更多的对象,你可以创建不可改变数组可变数组像以下

scribbles = [NSMutableArray arrayWithArray:JSON[@"scribbles"]]; 

取而代之的是:

[scribbles addObjectsFromArray:mutableJson]; 

做到这一点:

scribbles = [NSMutableArray arrayWithArray:JSON[@"scribbles"]];