替换可变数组中的对象

suM*_*uMi 1 arrays objective-c nsmutablearray

这应该是相当容易的,可能我只是遗漏了一件小事:我有一个名为defaultImages的图像数组

NSMutableArray *defaultLetters;
Run Code Online (Sandbox Code Playgroud)

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

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

[defaultLetters replaceObjectAtIndex:0 withObject:croppedPhoto];
Run Code Online (Sandbox Code Playgroud)

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

Vik*_*ica 7

你分配了一个NSArray对象defaultLetters,而不是一个NSMutableArray.

__NSArrayI是NSArray的私有子类.该I代表不可改变的.

什么是__NSArrayI和__NSArrayM?如何转换为NSArray?


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

if(![defaultLetters respondsToSelector:@selector(replaceObjectAtIndex:withObject:)]){
    defaultLetters = [defaultLetters mutableCopy];
}
Run Code Online (Sandbox Code Playgroud)

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


Tam*_*ing 7

我认为你这样分配价值

defaultLetters = anotherMutableArray;
Run Code Online (Sandbox Code Playgroud)

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

defaultLetters = [anotherMutableArray mutableCopy];
Run Code Online (Sandbox Code Playgroud)

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

[defaultLetters replaceObjectAtIndex:0 withObject:croppedPhoto];
Run Code Online (Sandbox Code Playgroud)

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