【发布时间】:2019-06-19 14:58:58
【问题描述】:
我在 FetchedResultsController 上面临 CoreData 崩溃。
场景:我正在尝试在 FetchedResultsController 上同时插入和删除一些数据。所以,在这段时间里,意外发生了崩溃。
注意:崩溃很少发生。
我尝试了 StackOverflow 的一些答案,但没有一个对我有用。所以,解决这个问题会很有帮助。
func controller(_ controller: NSFetchedResultsController<NSFetchRequestResult>, didChange anObject: Any, at indexPath: IndexPath?, for type: NSFetchedResultsChangeType, newIndexPath: IndexPath?) {
switch type {
case .insert:
guard let newIndexPath = newIndexPath else { return }
self.tableView.insertRows(at: [newIndexPath], with: rowAnimation)
case .delete:
guard let indexPath = indexPath else { return }
self.tableView.deleteRows(at: [indexPath], with: .none)
case .update:
guard let indexPath = indexPath else { return }
self.updateRow(atIndexpath: indexPath)
case .move:
guard let deleteIndexPath = indexPath, let insertIndexPath = newIndexPath, deleteIndexPath == insertIndexPath else {
return
}
self.updateRow(atIndexpath: insertIndexPath)
}
}
崩溃报告:
*** -[AppName.tableView _endCellAnimationsWithContext:] 中的断言失败,/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKitCore/UIKit-3698.119.2/UITableView.m:1821
[error] 故障:严重的应用程序错误。在调用 -controllerDidChangeContent: 期间,从 NSFetchedResultsController 的委托中捕获了一个异常。无效更新:第 7 节中的行数无效。更新后现有节中包含的行数 (4) 必须等于更新前该节中包含的行数 (4),加上或减去数字从该部分插入或删除的行数(1 插入,0 删除)加上或减去移入或移出该部分的行数(0 移入,0 移出)。与 userInfo (null)
我对这个问题有了一些线索,它发生在 tableView.endUpdates() 中的 controllerDidChangeContent 代表中。
【问题讨论】:
标签: ios swift core-data nsfetchedresultscontroller