2010-11-21 79 views
9

这可能是一个简单的问题,但有人会很高兴能够给我一个提示什么是错的,在以下情况下,我只是不明白。我有一个NSMutableArray“playerArray”,它具有对象“ZERO”,“ONE”,“TWO”,THREE“NSMutableArray removeObjectAtIndex导致错误

我试图删除”行“对象,但它不起作用。因此,它返回一个不可改变的阵列作为例外似乎越来越抛出,因为它不响应removeObjectAtIndex

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

结果是:

playerArray :(
ZERO,
ONE,
TWO,
THREE

2010-11-21 20:58:46.681 FamQuiz_v2 [2166:207]行: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'

+0

显示。 – bbum 2010-11-21 21:18:40

回答

19

它看起来像你的数组实际上不是一个NSMutableArray。通过登录类名进行验证:

NSLog(NSStringFromClass([playerArray class])); 

,或者与检查:在您创建playerArray

if ([playerArray isKindOfClass: [NSMutableArray class]]) 
{ 
... 
} 
+0

上面运行NSLog后,类是:__NSArrayI ??有人可以解释这可能是怎么回事?在@interface中我有“NSMutableArray * playerArray;”和“@property(nonatomic,retain)NSMutableArray * playerArray;”。 – PeterK 2010-11-21 20:48:08

+0

...以及我如何解决这个问题? – PeterK 2010-11-21 20:48:29

+2

那么,你是如何实例化它的?看这里。 – d11wtq 2010-11-21 20:59:28

9

错误消息指示playerArray是NSArray的实例,而不是NSMutableArray。您不能在NSArray的实例上调用removeObjectAtIndex。

-[__NSArrayI removeObjectAtIndex:]: unrecognized selector sent to instance