我正在尝试在表视图中移动包含核心数据对象的行。我收到无效的更新错误。
无效更新:第0节中的行数无效。更新后的现有部分中包含的行数(2)必须等于更新前该部分中包含的行数(2),或者减去从该部分插入或删除的行数(插入0,删除1),加上或减去移入或移出该部分的行数(0移入,0移出)。'
我不明白为什么我会这样做。我正在删除我想在源索引路径上移动的行,然后将其插入目标索引路径。
这是我的代码:
// Move fetchedResultsController objects
override func tableView(tableView: UITableView, moveRowAtIndexPath sourceIndexPath: NSIndexPath, toIndexPath destinationIndexPath: NSIndexPath) {
let movedObject = self.fetchedResultsController.objectAtIndexPath(sourceIndexPath) as! NSManagedObject
controller(self.fetchedResultsController, didChangeObject: movedObject, atIndexPath: sourceIndexPath, forChangeType: .Delete, newIndexPath: sourceIndexPath)
controller(self.fetchedResultsController, didChangeObject: movedObject, atIndexPath: sourceIndexPath, forChangeType: .Insert, newIndexPath: destinationIndexPath)
}
答案 0 :(得分:0)
fetchedResultsController作业是监视核心数据更改并告诉UI它需要更新以匹配核心数据中现在的内容。你不能调用controller(didChangeObject:..方法; fetchedResultsController调用它们。
您应该只更新core-data中的对象,等待fetchedResultsController通知您的viewController更新。
此举更为复杂。 tableView已经更新,现在您想要更新核心数据。但是当你更新核心数据时,fetchedResultsController将会告诉你做这个动作 - 你已经做过了!因此,将fetchedResultsController设置为nil,然后更新core-data(这将是在fetch中存储对象的字段,可能是order
属性或类似的东西),然后重置fetchedResultsController'代表。