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