[__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];
}
我找到了这个解决方案。复制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];
}
我正在发布相同的解决方案....现在有同样的崩溃仪式,并解决它做类似的事情...:p – Rumin
我不知道,有人报告我的问题是消极的。这是非常重要的问题,许多人以类似的方式解决问题。请帮助我,否则我会被阻止。 – WasimSafdar
我低估了你的答案,因为这是一个荒谬的解决方案,不应该鼓励。你应该确保'sortedContacts'一旦创建就可以改变,并且在处理按钮按下时不会这样做。这是一个对自己的代码失去控制权的人的巨大破坏。 – Droppy
这只是简单的灵魂如果你想删除数组索引的第一个对象,而不是添加这行代码。
data = [[dicsResponse valueForKey:@"data"]mutableCopy];
[data removeObjectAtIndex:0];
@Larme虽然他没有在联系人上调用removeObjectAtIndex。 – dasblinkenlight
@dasblinkenlight:好点。我现在的问题是哪条线确实导致了崩溃。 – Larme
@Larme我相当肯定这是调用'[sortedContacts removeObjectAtIndex:indexPath.row]',但是在'NSArray'被分配给一个变量时,该变量应该保存对可变数组的引用。 – dasblinkenlight