这应该很容易,可能我只是错过了一件小事: 我有一个名为defaultImages
的图像数组NSMutableArray *defaultLetters;
然后我添加所需的字母(数组长度为42)
后来我试图用另一个图像替换阵列中的一个图像。像这样:
[defaultLetters replaceObjectAtIndex:0 withObject:croppedPhoto];
但我得到一个错误说:“ - [__ NSArrayI replaceObjectAtIndex:withObject:]:无法识别的选择器发送到实例0x180ae190” 我缺少一步吗?
答案 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];
试试这个......因为如果直接指定你就不能插入或删除。