0

我已将我的可变对象定义为

NSMutableArray *scribbles;

然后在viewDidLoad我初始化它

scribbles = [[NSMutableArray alloc] init];

获取我的第一个 JSON 页面后,我将数据添加到其中

scribbles = JSON[@"scribbles"];

然后稍后我加载第二页并尝试将更多数据添加到我的数组中

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

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

4

3 回答 3

4

你应该做:

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
于 2013-03-11T09:43:32.473 回答
0
scribbles = JSON[@"scribbles"];

此行使您的 scribbles 对象不可变。您需要添加对象而不是分配。如果您有更多对象,您可以从不可变数组创建可变数组,如下所示

scribbles = [NSMutableArray arrayWithArray:JSON[@"scribbles"]];
于 2013-03-11T09:43:10.460 回答
-1

而不是这个:

[scribbles addObjectsFromArray:mutableJson];

做这个:

scribbles = [NSMutableArray arrayWithArray:JSON[@"scribbles"]];
于 2013-03-11T09:44:22.100 回答