【发布时间】:2017-12-03 02:05:24
【问题描述】:
我找到了解决这个问题的方法,但我不是很喜欢这个修复方法。我的问题是这样的。我正在使用NSFetchedResultsController 来填充 UICollectionView——它显示了一组图像。每个图像都由一个 Core Data 对象描述(例如,它的文件名在 Core Data 对象中)。
我的 UI 控件允许用户同时删除多个图像,但在用户删除多个对象时遇到了问题。删除的代码是:
for image in images {
CoreData.sessionNamed(CoreDataExtras.sessionName).remove(image)
}
CoreData.sessionNamed(CoreDataExtras.sessionName).saveContext()
(其中一些是我的库代码)。 删除两个对象后,我收到崩溃和以下日志消息:
CoreData:错误:严重的应用程序错误。异常被捕获 在核心数据更改处理期间。这通常是一个错误 NSManagedObjectContextObjectsDidChangeNotification 的观察者。 无效更新:第 0 节中的项目数无效。 更新 (99) 后包含在现有部分中的项目必须是 等于该部分中包含的项目数之前 更新(101),加或减插入或删除的项目数 从该部分(0 插入,1 删除)和加号或减号 移入或移出该部分的项目(0移入,0移出)。 与 userInfo (null)
如果我将删除代码更改为:
for image in images {
CoreData.sessionNamed(CoreDataExtras.sessionName).remove(image)
CoreData.sessionNamed(CoreDataExtras.sessionName).saveContext()
}
我猜问题是在委托回调方法中:
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {
我愿意:
collectionView.deleteItems(at: [indexPath])
显然,您可以在 didChangeObject 方法中执行 reloadItems,也可以在每次删除对象后执行 saveContext。
【问题讨论】:
标签: ios core-data nsfetchedresultscontroller