UITableView内部错误:无法生成具有旧节数的新节映射:和新节数:with userInfo(null)

时间:2015-06-19 16:05:42

标签: ios objective-c uitableview debugging core-data

之前我没有看过这个错误,我搜索了为什么会发生这种错误但找不到任何相关信息:

  

CoreData:错误:严重的应用程序错误。抓住了一个例外   在调用期间来自NSFetchedResultsController的委托   -controllerDidChangeContent :. UITableView内部错误:无法生成具有旧部分计数的新部分地图:1和新部分   count:0 with userInfo(null)

有谁知道这里可能会发生什么?我不确定“内部错误”部分 - 此错误是否表示我的代码存在问题或UITableView中存在错误?

3 个答案:

答案 0 :(得分:2)

Stephan在对原始问题的评论中已经提到了这一点,但我认为值得分享一些代码。这个答案实际上来自用户GERUB在这里找到的apple dev论坛上的帖子中发表的评论:https://forums.developer.apple.com/thread/9964

if tableView.numberOfRowsInSection(indexPath.section) == 1{  
    tableView.deleteSections(NSIndexSet(index: indexPath.section), withRowAnimation: .Automatic)  
}else{  
    tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Automatic)  
} 

我已在NSFetchedResultsControllerDelegate方法实现中对此进行了测试,但它运行良好。

答案 1 :(得分:1)

您是否在多个UITableView中使用此NSFetchedResultsController?如果是这样,那就是原因。对一个UITableView使用一个NSFetchedResultsController。切换视图时不要只切换查询。

答案 2 :(得分:0)

将CoreData与NSFetchedResultsController一起使用时,您真的不需要检查它是否是您要删除的部分中的最后一项。

您可以简单地使用NSFetchedResultsControllerDelegate的另一种方法:controller(: NSFetchedResultsController<NSFetchRequestResult>, didChange: NSFetchedResultsSectionInfo, atSectionIndex: Int, for: NSFetchedResultsChangeType)

这个委托方法会在添加或删除某个部分时通知您,然后您可以采取相应的行动,让您拥有更简单的代码。