我有一个包含2个实体的核心数据堆栈:'Client'和'Car'。这是一种可能的关系。我有两个tableViewControllers首先显示客户端,然后一个客户端被选中那个客户端汽车的列表。
我目前在第二个tableViewController viewDidLoad
方法中使用以下代码片段...
NSSet *cars = client.cars;
carsArray = [cars allObjects];
carsArray
是NSArray
,在第二个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
吗?
非常感谢
答案 0 :(得分:0)
allObjects
方法返回NSArray *
,如果您只是尝试将其分配给NSMutableArray
属性,则不会转换对象本身。
您需要使用+[NSMutableArray arrayWithArray:]
或更通用的方法-[NSObject mutableCopy]
:
[self setCarsArray:[[cars allObjects] mutableCopy]];
Objective-C中的所有可变类都是这种情况:要从immutable创建一个可变对象,你必须显式调用转换方法。