替换可变数组中的对象

时间:2013-10-25 12:49:26

标签: objective-c arrays nsmutablearray

这应该很容易,可能我只是错过了一件小事: 我有一个名为defaultImages

的图像数组
NSMutableArray *defaultLetters;

然后我添加所需的字母(数组长度为42)

后来我试图用另一个图像替换阵列中的一个图像。像这样:

[defaultLetters replaceObjectAtIndex:0 withObject:croppedPhoto];

但我得到一个错误说:“ - [__ NSArrayI replaceObjectAtIndex:withObject:]:无法识别的选择器发送到实例0x180ae190” 我缺少一步吗?

2 个答案:

答案 0 :(得分:7)

您已将NSArray个对象分配给defaultLetters,而不是NSMutableArray

__NSArrayI是NSArray的私有子类。 I代表不可变。

请参阅What is __NSArrayI and __NSArrayM? How to convert to NSArray?


如果你无法确定,如果它是你正在分配的NSArray或NSMutableArray,你可以随时测试。

if(![defaultLetters respondsToSelector:@selector(replaceObjectAtIndex:withObject:)]){
    defaultLetters = [defaultLetters mutableCopy];
}

但这可能表明您的代码中存在架构问题,因为您应该知道您正在处理哪些对象。

答案 1 :(得分:7)

我认为您可以像这样分配价值

defaultLetters = anotherMutableArray;

如果您喜欢这样,请更换如下..

defaultLetters = [anotherMutableArray mutableCopy];

您可以替换该数组中的对象

[defaultLetters replaceObjectAtIndex:0 withObject:croppedPhoto];

试试这个......因为如果直接指定你就不能插入或删除。