当我的iPhone应用程序崩溃时,我在控制台中收到此错误:*** Assertion failure in -[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit/UIKit-2372/UITableView.m:1070
崩溃并在到达以下代码行时给我以下信息:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[tableView endUpdates];
}
有关我的应用程序以及如何实现此目的的一些详细信息。我有一个带有表视图的视图控制器,该视图显示我的核心数据对象。我具有此视图设置以显示来自两个实体的数据,因此表第1部分显示了来自上一个实体的对象,然后表2显示了来自我的第二个实体的对象。
这是我的问题开始的地方。尽管效果很好,但我可以推送我的下一个视图控制器,并将对象添加到我的第一个实体中,然后弹出回到我的tableviewcontroller中,而不会出现问题。但是,如果我尝试将对象添加到第二个实体,则返回到tableviewcontroller后,它会崩溃,如上所述。
我无法弄清楚是什么原因造成的,所以我不确定从哪里开始寻找。
控制台中的一些其他错误信息:
CoreData:错误:严重的应用程序错误。在调用-controllerDidChangeContent:期间,从NSFetchedResultsController的委托捕获了一个异常。无效的更新:部分0中的行数无效。更新(2)之后,现有部分中包含的行数必须等于更新(2)之前该部分中包含的行数,再加上或减去该数字从该部分插入或删除的行数(插入1,删除0),加上或减去移入或移出该部分的行数(移入0,移出0)。与userInfo(空)
码:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
NSInteger rows;
id <NSFetchedResultsSectionInfo> sectionInfoAccounts = [[fetchedResultsControllerAccounts sections] objectAtIndex:0];
id <NSFetchedResultsSectionInfo> sectionInfoCosts = [[fetchedResultsControllerCosts sections] objectAtIndex:0];
if (section == 0) rows = [sectionInfoAccounts numberOfObjects];
else if (section == 1) rows = [sectionInfoCosts numberOfObjects];
return rows;
}
最佳答案
您正在使用2个提取的结果控制器进行表视图:一个FRC用于表第0部分,一个FRC用于表第1部分。我在这里有点猜测,但可能是因为错误在
- (void)controller:(NSFetchedResultsController *)controller
didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
如果第二个FRC调用了该函数,则
indexPath
/ newIndexPath
的段部分为0(因为FRC只有一个段)。但是对应的表节是1。因此,在调用
insertRowsAtIndexPaths:...
,insertRowsAtIndexPaths:...
等之前,必须将FRC索引路径映射到表视图的索引路径。例如,在插入事件的情况下:
NSIndexPath *newIndexPath1 = [NSIndexPath indexPathForRow:newIndexPath.row inSection:1];
[self.tableView insertItemsAtIndexPaths:@[newIndexPath1]];
否则,将第二个实体的新对象作为第一个表视图部分的行插入,这会导致不一致异常。
关于iphone - UITableView CoreData断言失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12754379/