1

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

NSMutableArray *defaultLetters;

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

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

[defaultLetters replaceObjectAtIndex:0 withObject:croppedPhoto];

但我收到一条错误消息:“-[__NSArrayI replaceObjectAtIndex:withObject:]: unrecognized selector sent to instance 0x180ae190” 有没有我遗漏的步骤?

4

2 回答 2

8

我认为你分配这样的价值

defaultLetters = anotherMutableArray;

如果您这样做,请按以下方式替换..

defaultLetters = [anotherMutableArray mutableCopy];

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

[defaultLetters replaceObjectAtIndex:0 withObject:croppedPhoto];

试试这个..因为如果你直接分配你不能插入或删除。

于 2013-10-25T12:56:09.980 回答
7

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

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

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


如果您不能确定,您分配的是 NSArray 还是 NSMutableArray,您可以随时进行测试。

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

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

于 2013-10-25T12:51:05.137 回答