Ios UITableView-核心数据应用程序中的表视图崩溃,因为删除后的行数无效

Ios UITableView-核心数据应用程序中的表视图崩溃,因为删除后的行数无效,ios,core-data,uitableview,Ios,Core Data,Uitableview,我正在创建一个核心数据示例,其中我希望删除托管对象(这里称为项目)。删除manages对象似乎可行,但刷新tableView是一个问题。下面是调用tableView:numberofrowsinssection:时应用程序崩溃时收到的日志消息 由于未捕获异常而终止应用程序 'NSInternalInconsistencyException',原因:'无效更新:无效 节0中的行数。表中包含的行数 更新(13)后的现有节数必须等于 更新(13)之前该节中包含的行,加号或减号 从该节插入或删除的行数(

我正在创建一个核心数据示例,其中我希望删除托管对象(这里称为项目)。删除manages对象似乎可行,但刷新tableView是一个问题。下面是调用
tableView:numberofrowsinssection:
时应用程序崩溃时收到的日志消息

由于未捕获异常而终止应用程序 'NSInternalInconsistencyException',原因:'无效更新:无效 节0中的行数。表中包含的行数 更新(13)后的现有节数必须等于 更新(13)之前该节中包含的行,加号或减号 从该节插入或删除的行数(插入0, 1)并加上或减去移入或移出的行数 该部分(0移入,0移出)。'

这里,删除前的行数为14,删除后的行数为13。请参阅我在A.获取行数时使用的方法,行数应等于核心数据中的“项目”数。B.删除项目。C.设置tableView中的行数

A

B

C


这与核心数据无关

必须确保表中的行数和数据源中的行数始终相同

如果需要删除一行,则需要从数据源中删除该行,从表中删除该行,但->需要在这两行代码之间执行该操作:

[_tableView beginUpdates];

// here delete from data source, and from the table.

[_tableView endUpdates];

我认为问题在于,我不需要使用以下方法手动删除行:

if (editingStyle == UITableViewCellEditingStyleDelete) {
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }

我认为FetchResultsController会处理这个问题。不管怎样,我删除了该行,它仍然有效。

tableView与self.tableView相同吗?\u tableView是变量,self.tableView是属性(可能指变量),所以是的,大多数时候都是相同的……啊哈。可能它[self.tableView beginUpdates]带有s?是的,对不起,我没有完全检查方法名称:)我会修复它。谢谢。那么你是说我会用我的承诺风格来包装内容:用这个?尝试一下,我得到了完全相同的崩溃。。谢谢你!
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {   
    int noOfRows = [[[self.fetchedResultsController sections] objectAtIndex:section] numberOfObjects];
    return noOfRows;    
}
[_tableView beginUpdates];

// here delete from data source, and from the table.

[_tableView endUpdates];
if (editingStyle == UITableViewCellEditingStyleDelete) {
        [tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationFade];
    }