删除UITableViewCell会引发异常

时间:2014-01-23 14:25:08

标签: ios objective-c exception uitableview

我正在尝试删除这样的UITableViewCell:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete)
{
    [self._tableViewItems beginUpdates];
    [self._tableViewItems deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    [self._tableViewItems endUpdates];

    [[AppDelegate appDelegate].managedObjectContext deleteObject:[_arraySortedItems objectAtIndex:indexPath.row]];
    NSError *error = nil;
    [[AppDelegate appDelegate].managedObjectContext save:&error];
}

[self getItems];

}

这是getItems:

-(void)getItems
{
_arrayAllItems = NULL;
_arrayAllItems = [[NSMutableArray alloc]initWithArray:[[AppDelegate appDelegate]getItems]];


_arraySortedItems = NULL;
_arraySortedItems = [[NSMutableArray alloc]initWithArray:_arrayAllItems];

[_tableViewItems reloadData];
[_tableViewItems setNeedsLayout];

}

但是这段代码在[self._tableViewItems endUpdates]失败了;除了这个例外:

Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-2903.23/UITableView.m:1330

搜索网络,但没有任何解决方案可以帮助我。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您只需创建一个主详细信息项目即可获得此演示参考。它已经在那里可用了。或者你可以试试这个。

- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the specified item to be editable.
return YES;
}

if (editingStyle == UITableViewCellEditingStyleDelete) {
    [_objects removeObjectAtIndex:indexPath.row];
    [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
} 

如果有效,请告诉我。

答案 1 :(得分:0)

尝试翻转它 - 我认为您需要在删除行之前删除该对象。否则,在删除行之后,单元格的数量与UITableView认为应该是的不匹配。

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
if (editingStyle == UITableViewCellEditingStyleDelete)
{

    [[AppDelegate appDelegate].managedObjectContext deleteObject:[_arraySortedItems objectAtIndex:indexPath.row]];
    NSError *error = nil;
    [[AppDelegate appDelegate].managedObjectContext save:&error];

    [self._tableViewItems beginUpdates];
    [self._tableViewItems deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
    [self._tableViewItems endUpdates];


}