Objective c NSArray与NSMutableArray

Objective c NSArray与NSMutableArray,objective-c,nsmutablearray,nsarray,Objective C,Nsmutablearray,Nsarray,我有一个包含两个实体的核心数据堆栈:“客户机”和“汽车”。这是一种一对一的关系。我有两个TableViewController,首先显示客户机,然后选择一个客户机后显示该客户机的列表 我目前正在第二个tableViewController viewDidLoad方法中使用以下代码片段 NSSet *cars = client.cars; carsArray = [cars allObjects]; carsArray是一个NSArray,在第二个tableViewCotroller中声明和合成

我有一个包含两个实体的核心数据堆栈:“客户机”和“汽车”。这是一种一对一的关系。我有两个TableViewController,首先显示客户机,然后选择一个客户机后显示该客户机的列表

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

NSSet *cars = client.cars;
carsArray = [cars allObjects];
carsArray是一个NSArray,在第二个tableViewCotroller中声明和合成。如果我尝试将carsArray设置为NSMutableArray,以便在以后删除汽车时对其进行编辑,我会收到以下编译器警告

不兼容的Objective-C类型“struct NSArray*”,在从不同的Objective-C类型传递“setCarsArray:”的参数1时应为“struct NSMutableArray*”

有人能给我解释一下为什么这可以用NSArray而不是NSMutableArray吗

非常感谢

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

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

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

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