2013-02-21 94 views
1

我的tableview datasoure来自一个数组,它从托管对象上下文的executeFetchRequest方法中获取数据。在commitEditingStyle委托,我得到这个错误:删除表格视图单元格,但“行数无效”显示

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (1) must be equal to the number of rows contained in that section before the update (1), 

委托:

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     [self.managedOjbectContext deleteObject:[self.myEvents objectAtIndex:indexPath.row]]; 
     [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
     [self.tableView reloadData]; 
    } 
} 

回答

1

错误说明了这一切,你删除了一行,但你的代表仍然说它在那里。

我的猜测是你没有从self.myEvents中删除你的对象。从托管上下文中删除对象不会将其从阵列中删除。

假设self.myEventsNSMutableArray*

[self.myEvents removeObjectAtIndex:indexPath.row] 
+0

它工作。谢谢。 – 2013-02-22 12:26:15

1

您应该删除从您的NSArray项,然后重新加载的tableView,这样不会有不一致之处..

0

尝试使用[tableView beginUpdates];[tableView endUpdates];不使用reloadData这样

[tableView beginUpdates]; 
if (editingStyle == UITableViewCellEditingStyleDelete) { 
     [self.managedOjbectContext deleteObject:[self.myEvents objectAtIndex:indexPath.row]]; 
     [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 

    } 
[tableView endUpdates]; 
0

为什么不封装删除所有[self.tableView beginUpdates][self.tableView endUpdates]之间?

- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (editingStyle == UITableViewCellEditingStyleDelete) { 
     [self.tableView beginUpdates]; 
     [self.managedOjbectContext deleteObject:[self.myEvents objectAtIndex:indexPath.row]]; 
     [self.tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade]; 
     [self.tableView endUpdates]; 
    } 

} 

按:Apple's Table View Programmming Guidelines

0

如果从删除单元格的TableView,您的数据源需要进行更新,以识别这些更改。

有一种称为numberOfRowsInSection的方法:此方法返回表视图应显示的单元格数。更可能的是它使用数组或其他类型的数据结构。您需要确保该数组与表格视图本身所做的任何更改保持同步。如果您告诉表视图以删除视图,则还需要更新表视图的后备数据以反映更改。