我对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而不是试图(过度)使用文字语法?
另外,既然这只是一个愚蠢的警告,我可以忽略它并继续吗?这看起来......最糟糕的是懒惰,也许只是为未来的恶作剧打开了大门。
答案 0 :(得分:2)
您需要将变量声明为NSMutableArray
,而不是NSArray
。 addObject:
是仅在NSMutableArray
上提供的方法。
编辑:您似乎还有一个不必要的@
。你的代码应该是:
NSMutableArray *mutable = [@[a, b, c] mutableCopy];
[mutable addObject:d];
答案 1 :(得分:0)
在这种情况下,mutableCopy不会返回NSMutableArray吗?
确实如此。这就是为什么你必须将返回值分配给NSMutableArray,而不是NSArray。
NSMutableArray *myArray = [@[/*array objects here*/] mutableCopy];
应该让编译器闭嘴。