gpt4 book ai didi

iphone - 编辑/创建新对象(iPhone)时 NSManagedObjectContext 的正确用法是什么?

转载 作者:行者123 更新时间:2023-12-03 21:12:56 29 4
gpt4 key购买 nike

我试图找出在查看、编辑和创建 NSManagedObjects 时使用 NSManagedObjectContexts 的正确方法。我觉得文档和示例已经解释了如何在最基本的情况下使用它们,但我不确定在稍微复杂的设置中正确的方法是什么。

设置:

  • 3 个主屏幕:对象列表、编辑对象屏幕和新对象屏幕。
  • 另一个线程正在下载对象以添加到后台列表中。

要求:

  • 列表屏幕使用 MOC 和 NSFetchedResultsController 来获取其所有对象。
  • 编辑和新建对象屏幕使用 MOC 来保存/删除对象,并使用 NSFetchedResultsController 来建立关系。
  • 下载的对象需要 MOC 将其对象保存到 Core Data(在主线程上)。

问题:

  • 我需要多少个 MOC?
  • 我应该如何操纵这些 MOC?

可能的答案:

  • 拥有一个从未编辑且在列表屏幕中使用的“查看”MOC。使用单独的 MOC 进行编辑、新对象屏幕和下载。保存这些 MOC 后,将更改合并回“查看”MOC。这样,任何更改在保存之前都不会影响“查看”MOC。这就是我一直在做的事情;它似乎没有我希望的那么顺利。编辑和查看之间存在脱节,当我知道事情可能发生变化时,我无法检查它们,而是必须等待 NSFetchedResultsController 委托(delegate)方法完成并检查所有可能发生变化的事情。如果我需要更改 ListView 中的某些数据,这也会变得很困难。

  • 拥有一个 MOC 来处理所有事情。这是我第一次尝试,但不确定如何处理编辑和创建。现在我了解更多了,我想我可以编辑对象或创建一个对象并在取消时回滚。在cimgf上,我看到了一个post这看起来很相似,它表示围绕编辑/创建和取消时创建撤消分组。然后我想我可以在下载的对象上使用单独的 MOC,因为它可能会在用户在主 MOC 中编辑时完成并保存。

  • 无论如何,重点是我不知道正确的方法是什么。你能帮我吗?

第一个可能答案的断开连接示例

  1. 在编辑 moc 中创建了一个对象 (1)。已保存。通过通知与 View moc 合并。
  2. 创建了一个新的 moc,因为我正在后台下载对象。更新了与​​ (1) 相关的一些对象。已保存。通过通知与 View moc 合并。
  3. 在编辑 moc 中编辑 (1)。已保存。通过通知与 View moc 合并。
  4. 问题:由于编辑 moc 从未获得新的 moc 更改,因此在保存时,它会删除受其影响的所有新 moc 更改。
  5. 解决方案:我意识到我还可以将更改合并到编辑 moc 中,或者始终使用新的 moc 来编辑内容。然而,我不断遇到这样的小事情,并且必须找到解决方案,所以这让我相信这不是最好的答案。

最佳答案

每个线程至少应该有一个 MOC(它们不是线程安全的)。因此,您可以为下载程序(在后台线程中)设置一个 MOC,并为主线程列表中的事件、编辑和新 build 置另一个 MOC。

当你说存在脱节时,你能说得更具体一些吗?您是否正在使用通知(NSManagedObjectContextDidSaveNotification)并在收到该通知时执行mergeChangesFromContextDidSaveNotification。请记住,mergeChangesFromContextDidSaveNotification 应该在主线程上执行。

在带有 NSFetchedResultsController 的 View Controller 中,您是否正确处理了 NSFetchedResultsControllerDelegate 的所有情况?

关于iphone - 编辑/创建新对象(iPhone)时 NSManagedObjectContext 的正确用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1824002/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com