[__NSArrayI replaceObjectAtIndex:withObject:]: 无法识别的选择器发送到实例

4

我有一个NSMutableArray,需要更改它的值,但是我遇到了这个错误:
[__NSArrayI replaceObjectAtIndex:withObject:]: unrecognized selector sent to instance 0x5291db0
这是我的NSMutableArray的声明:

NSMutableArray *selectedOptions = [NSArray arrayWithObjects:[NSNumber numberWithInteger:0], nil]; 

那么,我正在使用 replaceObjectAtIndex 方法,代码如下:
[self.selectedOptions replaceObjectAtIndex:0 withObject:[NSNumber numberWithInteger:1]];

我遇到了一个错误,我正在使用NSMutableArray。
谢谢。


4
你正在创建一个NSArray并将其存储在一个NSMutableArray变量中。这并不会使它成为可变数组。 - mttrb
2
不要忽略编译器警告。 - Ramy Al Zuhouri
2个回答

9
你正在创建一个常规的不可变的NSArray。你的代码应该是:
NSMutableArray *selectedOptions = [NSMutableArray arrayWithObjects:[NSNumber numberWithInteger:0], nil]; 

Objective C非常动态,因此它不会在编译时捕获此错误。


1
非常感谢。我曾认为将NSArray传递给NSMutableArray会自动将其内容更改为NSMutableArray。 - user1600801

6

您需要通过执行以下操作来初始化NSMutableArray

NSMutableArray *selectedOptions = [NSMutableArray alloc] init];

通过使用NSArray进行初始化,您将无法再使用repalceObjectAtIndex:withObject:方法,这就是您的问题所在。

在使用上述代码行对NSMutableArray进行初始化后,只需使用addObject方法向其中添加对象即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接