【问题标题】:How force NSFetchedResultsController update after change my context更改我的上下文后如何强制 NSFetchedResultsController 更新
【发布时间】:2015-09-20 02:15:41
【问题描述】:

我有一个 CoreData 模型,我可以插入一些字符串作为新行。然后我的NSFetchedResultsController 类型返回.Insert

但是当我改变我的数据时:

let uri = NSURL(string: "My Object ID")!
let mID = self.managedObjectContext!.persistentStoreCoordinator!.managedObjectIDForURIRepresentation(uri)
let oldM = try self.managedObjectContext!.existingObjectWithID(mID!) as! Soft
oldM.info = "New data"

有时NSFetchedResultsController 不会发送.Update,但有时效果很好。是什么原因?有什么方法可以强制更新NSFetchedResultsController

更新 我尝试检查何时调用此代码

func controllerWillChangeContent(controller: NSFetchedResultsController) {
    print("test 1")
}

func controllerDidChangeContent(controller: NSFetchedResultsController) {
    print("test 2")
}

只有当 NSFetchedResultsController 发送某种类型的 .Update .Insert 时我才有这两个值,所以我什至不更新 tableView,也许我可以添加观察然后更新我的行。

【问题讨论】:

标签: swift swift2


【解决方案1】:

您使用此代码处理的某些操作可能不会更新表数据。您通常需要调用 tableView.reloadData() 来获取屏幕上的更新。

【讨论】:

  • 使用获取的结果控制器,您通常不必调用 reloadData,因为在管理对象更改后,受影响的表视图行会自动更新。
  • 行在调用 didChangeObject 时更新,您可以在其中调用适用于 changeType 的方法来重新加载数据。如果调用的操作不是 .Insert、.Update 等之一。调用 .reloadData() 是一种常见的做法。我错了吗?
  • “自动更新”措辞不当。通常您调用 insertRowsAtIndexPaths/deleteRowsAtIndexPaths/reloadRowsAtIndexPaths,例如参见 developer.apple.com/library/prerelease/ios/documentation/… 中的示例代码,以便您获得漂亮的动画更新。
猜你喜欢
  • 1970-01-01
  • 2011-04-21
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多