之前我没有看过这个错误,我搜索了为什么会发生这种错误但找不到任何相关信息:
CoreData:错误:严重的应用程序错误。抓住了一个例外 在调用期间来自NSFetchedResultsController的委托 -controllerDidChangeContent :. UITableView内部错误:无法生成具有旧部分计数的新部分地图:1和新部分 count:0 with userInfo(null)
有谁知道这里可能会发生什么?我不确定“内部错误”部分 - 此错误是否表示我的代码存在问题或UITableView中存在错误?
答案 0 :(得分:2)
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)
。
这个委托方法会在添加或删除某个部分时通知您,然后您可以采取相应的行动,让您拥有更简单的代码。