0

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

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

并且编译器给了我一个警告,指出“myArray 可能无法响应 addObject”。

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

另外,既然这只是一个愚蠢的警告,我可以忽略它并继续吗?这似乎……在最坏的情况下是懒惰的,也许只是为将来的恶作剧打开了大门。

4

2 回答 2

2

您需要将变量声明为NSMutableArray,而不是NSArrayaddObject:是一种仅在 上可用的方法NSMutableArray

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

NSMutableArray *mutable = [@[a, b, c] mutableCopy];
[mutable addObject:d];
于 2012-10-17T18:24:09.203 回答
0

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

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

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

应该让编译器闭嘴。

于 2012-10-17T18:24:46.330 回答