[__NSArrayI removeObjectAtIndex:]:发送到实例的无法识别的选择器

问题描述:

我想删除特定索引处的行,但出现此错误。因为它显示NSArray,但我使用NSMutableArray。不知怎的,它强制类型铸造。[__NSArrayI removeObjectAtIndex:]:发送到实例的无法识别的选择器

这两个数组是全局声明的。

NSArray *contacts; 
NSMutableArray *sortedContacts; 

在的cellForRowAtIndexPath方法,我在NSArray中复制的NSMutableArray以显示其它方式直接使用的NSMutableArray行的数据,键值错过。

contacts = [sortedContacts copy]; 

这是我在行上的按钮,按下它,我想删除所有包含数据的行。

-(void)CancelButtonClicked:(UIButton*)sender 
{ 
    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition]; 
    [sortedContacts removeObjectAtIndex:indexPath.row]; 
    [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    [self.tableView reloadData]; 
} 
+0

@Larme虽然他没有在联系人上调用removeObjectAtIndex。 – dasblinkenlight

+0

@dasblinkenlight:好点。我现在的问题是哪条线确实导致了崩溃。 – Larme

+1

@Larme我相当肯定这是调用'[sortedContacts removeObjectAtIndex:indexPath.row]',但是在'NSArray'被分配给一个变量时,该变量应该保存对可变数组的引用。 – dasblinkenlight

我找到了这个解决方案。复制NSMutableArray中的sortedconacts。之后,删除对象,将修改后的数组复制到原始sortedcontacts数组中。 :)

-(void)CancelButtonClicked:(UIButton*)sender 
    { 
    NSMutableArray *copy=[sortedContacts mutableCopy]; 
    CGPoint buttonPosition = [sender convertPoint:CGPointZero toView:self.tableView]; 
    NSIndexPath *indexPath = [self.tableView indexPathForRowAtPoint:buttonPosition]; 

    [copy removeObjectAtIndex:indexPath.row]; 
    [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
    [self.tableView reloadData]; 
    sortedcontacts=[copy mutableCopy]; 
    } 
+1

我正在发布相同的解决方案....现在有同样的崩溃仪式,并解决它做类似的事情...:p – Rumin

+0

我不知道,有人报告我的问题是消极的。这是非常重要的问题,许多人以类似的方式解决问题。请帮助我,否则我会被阻止。 – WasimSafdar

+0

我低估了你的答案,因为这是一个荒谬的解决方案,不应该鼓励。你应该确保'sortedContacts'一旦创建就可以改变,并且在处理按钮按下时不会这样做。这是一个对自己的代码失去控制权的人的巨大破坏。 – Droppy

这只是简单的灵魂如果你想删除数组索引的第一个对象,而不是添加这行代码。

data = [[dicsResponse valueForKey:@"data"]mutableCopy]; 

[data removeObjectAtIndex:0];