从NSMutableArray
中删除时出现以下错误-[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance 0x1cdced10
2011-07-13 00:33:14.333 MassText[1726:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance 0x1cdced10'
然而,在我删除之前,我打印出数组和索引。两者都没有,我没有理由相信为什么会发生这种错误。有什么想法吗?
答案 0 :(得分:8)
我有这个问题。我觉得我不小心使用了这种类型的铸造。
NSMutablearray * myarray = [[NSMutableArray alloc] init];
myarray =(NSMutableArray*) [mydictionary allkeys];
这会有一段时间..但是如果你处于一个紧凑而大的循环中,这往往会失败。
我将代码更改为
NSMutableArray * myarray= [[NSMutablearray alloc] initWithArray:[mydictionary allKeys]];
答案 1 :(得分:7)
对象是NSArray
,而不是NSMutableArray
。
答案 2 :(得分:4)
您正在NSArray实例上调用removeObjectAtIndex。我们可以通过崩溃日志清楚地看到。
答案 3 :(得分:4)
错误表示您正在尝试在 NSArray 上调用 removeObjectAtIndex 选择器,该选择器不会响应该选择器。
确保数组实际上是 NSMutableArray ,而不是 NSArray 。
答案 4 :(得分:4)
此时,四个聪明人(不包括我自己)指出你正在向一个认为它是不可变数组的对象发送-removeObjectAtIndex:
。这是一个很好的时间开始想知道为什么当你以前认为它是可变的时,数组是不可变的。如果你发布了一些显示数组如何创建的代码,那么这里的某个人可能会告诉你出了什么问题。
当你认为你有一个可变数组时,你可以得到一个不可变数组的一种方法是复制一个可变数组。例如,您可能拥有一个属性:
@property (copy) NSMutableArray *myArray;
也许你然后创建一个可变数组,添加一些对象,并将它分配给你的属性:
NSMutableArray *tempArray = [NSMutableArray array];
[tempArray addObject:@"You say goodbye"];
[tempArray addObject:@"I say hello"];
self.myArray = tempArray;
现在,tempArray指向可变数组还是不可变数组?我最近没有测试过,但我很确定你会得到一个不可变的数组。如果你说:
,你绝对会得到一个immutableArrayNSMutableArray *foo = [tempArray copy];
因此,开始在代码中查找重新分配数组指针的位置。毕竟,如果你的指针确实指向了一个可变数组,那么解释你得到的异常将非常困难。
答案 5 :(得分:0)
我遇到了同样的问题,这是因为使用了复制方法。我自己做了一个返回NSMutableArray *并且它有效。