我正在使用SWTableViewCell
,我有一个删除行的按钮。通常我会使用commitEditingStyle并没有问题,但SWTableViewCell
rightUtilityButtons
似乎导致应用程序崩溃。这是代码:
[self.tableView beginUpdates];
[context deleteObject:client];
NSError *error = nil;
if(![context save:&error]){
NSLog(@"OOPS");
}else{
[self.clients removeObjectAtIndex:cellIndexPath.row];
[self.tableView deleteRowsAtIndexPaths:@[cellIndexPath] withRowAnimation:UITableViewRowAnimationRight];
}
[self.tableView endUpdates];
这是错误:
** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
我意识到错误是因为我的数据源正在返回一个nil
对象。我搞砸了一下,尝试了几件事。如果我删除[self.tableView beginUpdates]
和[self.tableView endUpdates]
并添加[self.tableView reloadData]
或[self viewDidAppear:]
,我都不会这样做,因为单元格只是闪烁不存在。
我的tableView:numberOfRowsInSection:
只会触发一次,除非我使用[self.tableView reloadData]
。
为了让deleteRowsAtIndexPaths:withRowAnimation:
工作,我做错了什么。
修改的 获取cellIndexPath:
NSIndexPath *cellIndexPath = [self.tableView indexPathForSelectedRow];
答案 0 :(得分:1)
只需替换
if(![context save:&error]){
NSLog(@"OOPS");
}else{
[self.clients removeObjectAtIndex:cellIndexPath.row];
[self.tableView deleteRowsAtIndexPaths:@[cellIndexPath] withRowAnimation:UITableViewRowAnimationRight];
}
与
if([context save:&error] && cellIndexPath){
[self.clients removeObjectAtIndex:cellIndexPath.row];
[self.tableView deleteRowsAtIndexPaths:@[cellIndexPath] withRowAnimation:UITableViewRowAnimationRight];
}