UITableView内部错误:无法生成一个新的部分地图与旧的部分数:和新的部分数:with userInfo(null)

我之前没有看到这个错误,我做了一个search,为什么它可能会发生,但无法find任何信息:

CoreData:错误:严重的应用程序错误。 在调用-controllerDidChangeContent:期间,NSFetchedResultsController的委托捕获到exception。 UITableView内部错误:无法生成一个新的部分地图与旧的部分数:1和新的部分数:0与userInfo(空)

有谁知道这里可能会发生什么? 我不确定“内部错误”部分 – 这个错误是否表明我的代码或UITableView中的错误?

斯蒂芬已经在原始问题的评论中提到了这一点,但我认为这是值得分享一些代码。 这个答案实际上来源于用户GERUB在苹果开发论坛的一个主题上发表的评论: https : GERUB

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

我已经在NSFetchedResultsControllerDelegate方法实现里面testing了这个,它完美的工作。

你在多个UITableView中使用这个NSFetchedResultsController吗? 如果是这样,那就是原因。 为一个UITableView使用一个NSFetchedResultsController。 切换视图时不要切换查询。

将CoreData与NSFetchedResultsController一起使用时,并不需要太在意如何检查它是否是正在删除的部分中的最后一项。

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

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