NSArray与NSMutableArray

时间:2012-02-19 13:23:20

标签: objective-c nsmutablearray nsarray

我有一个包含2个实体的核心数据堆栈:'Client'和'Car'。这是一种可能的关系。我有两个tableViewControllers首先显示客户端,然后一个客户端被选中那个客户端汽车的列表。

我目前在第二个tableViewController viewDidLoad方法中使用以下代码片段...

NSSet *cars = client.cars;
carsArray = [cars allObjects];

carsArrayNSArray,在第二个tableViewCotroller中声明并合成。如果我尝试将carsArray设为NSMutableArray(因此我可以在以后删除汽车时编辑它),我会收到以下编译器警告......

Incompatible Objective-C types 'struct NSArray *', expected 'struct NSMutableArray *' when passing argument 1 of 'setCarsArray:' from distinct Objective-C type

有人可以向我解释为什么这适用于NSArray但不适用NSMutableArray吗?

非常感谢

1 个答案:

答案 0 :(得分:0)

allObjects方法返回NSArray *,如果您只是尝试将其分配给NSMutableArray属性,则不会转换对象本身。

您需要使用+[NSMutableArray arrayWithArray:]或更通用的方法-[NSObject mutableCopy]

[self setCarsArray:[[cars allObjects] mutableCopy]];

Objective-C中的所有可变类都是这种情况:要从immutable创建一个可变对象,你必须显式调用转换方法。