NSMutableArray removeObjectAtIndex导致错误

Pet*_*erK 9 iphone objective-c nsmutablearray

这可能是一个简单的问题,但有人能够在下面的场景中给我一个提示是什么错误,我只是不明白.我有一个NSMutableArray"playerArray",它有"ZERO","ONE","TWO","THREE"对象.

我试图删除"行"处的对象,但它不起作用.是不是因为它不会响应removeObjectAtIndex而返回一个不可变数组,因为异常似乎被抛出?

 NSUInteger row = 1; // [indexPath row];
 NSLog(@"playerArray:%@", playerArray);
 NSLog(@"row: %i", row);
 [playerArray removeObjectAtIndex:row];  
Run Code Online (Sandbox Code Playgroud)

结果是:

playerArray :(
ZERO,
ONE,
TWO,
THREE
)
2010-11-21 20:58:46.681 FamQuiz_v2 [2166:207] row:1
2010-11-21 20:58:46.682 FamQuiz_v2 [2166:207] - [__ NSArrayI removeObjectAtIndex :]:无法识别的选择器发送到实例0x5e3b9a0
2010-11-21 20:58:46.683 FamQuiz_v2 [2166:207] *由于未捕获的异常'NSInvalidArgumentException'终止应用程序,原因:' - [__ NSArrayI removeObjectAtIndex:]:无法识别的选择器发送到实例0x5e3b9a0'

Tom*_*ift 20

看起来您的数组实际上不是NSMutableArray.通过记录类名来验证它:

NSLog(NSStringFromClass([playerArray class]));
Run Code Online (Sandbox Code Playgroud)

或者,检查:

if ([playerArray isKindOfClass: [NSMutableArray class]])
{
...
}
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,我终于解决了这个问题.我调用了一个将NSArray返回给我的NSMutableArray的对象.我是一个菜鸟,但快速学习:-) (3认同)
  • `-isKindOfClass:`**不起作用**.NSArrays和NSMutableArrays通常都是NSCFArray的实例. (3认同)
  • 那么,你是如何实例化它的?看这里. (2认同)

Dar*_*ren 9

错误消息表明playerArray是NSArray的实例,而不是NSMutableArray.您不能在NSArray的实例上调用removeObjectAtIndex.

-[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance
Run Code Online (Sandbox Code Playgroud)