变异方法发送到不可变对象,而对象是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
答
scribbles = JSON[@"scribbles"];
此行使您的涂鸦对象不可变。您需要添加对象,而不是分配。如果您有更多的对象,你可以创建不可改变数组可变数组像以下
scribbles = [NSMutableArray arrayWithArray:JSON[@"scribbles"]];
答
取而代之的是:
[scribbles addObjectsFromArray:mutableJson];
做到这一点:
scribbles = [NSMutableArray arrayWithArray:JSON[@"scribbles"]];
:)这使得这么多sense.Thank你! S.O.会尽快接受你的回答。让我 – Jonathan 2013-03-11 09:46:53