文字语法与mutableCopy和Objective-C编译器警告

时间:2012-10-17 18:22:39

标签: objective-c compiler-warnings nsmutablecopying

我对Python的经验比其他任何东西都多,所以使用可变与不可变数组和dicts有点奇怪。我真的很喜欢Xcode 4.5添加的字面语法,但在做一些简单的搞乱时我遇到了这样的情况:

NSArray *myArray = [@[/*array objects here*/] mutableCopy];
[myArray addObject: @/*an object goes here*/];

并且编译器给我一个警告,声明“myArray可能不响应addObject”。

代码编译和addObject工作正常,我可以NSLog对象并验证它存在于myArray中 - 但我不完全理解这个警告的性质。在这种情况下,mutableCopy不会返回NSMutableArray吗?是否更适合简单地使用NSMutableArray而不是试图(过度)使用文字语法?

另外,既然这只是一个愚蠢的警告,我可以忽略它并继续吗?这看起来......最糟糕的是懒惰,也许只是为未来的恶作剧打开了大门。

2 个答案:

答案 0 :(得分:2)

您需要将变量声明为NSMutableArray,而不是NSArrayaddObject:是仅在NSMutableArray上提供的方法。

编辑:您似乎还有一个不必要的@。你的代码应该是:

NSMutableArray *mutable = [@[a, b, c] mutableCopy];
[mutable addObject:d];

答案 1 :(得分:0)

  

在这种情况下,mutableCopy不会返回NSMutableArray吗?

确实如此。这就是为什么你必须将返回值分配给NSMutableArray,而不是NSArray。

NSMutableArray *myArray = [@[/*array objects here*/] mutableCopy];

应该让编译器闭嘴。