【问题标题】:NSArray vs. NSMutableArrayNSArray 与 NSMutableArray
【发布时间】:2012-02-19 13:23:20
【问题描述】:

我有一个包含 2 个实体的核心数据堆栈:“客户端”和“汽车”。这是一对可能的关系。我有两个 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吗?

非常感谢

【问题讨论】:

    标签: objective-c nsmutablearray nsarray


    【解决方案1】:

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

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

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

    这将适用于 Objective-C 中的所有可变类:要从不可变对象创建可变对象,您必须显式调用转换方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多