【发布时间】:2017-07-07 15:14:57
【问题描述】:
我在我的徒步旅行应用程序中使用 Core Data。对于轨迹中的坐标,我的数据中有一个有序的一对多关系。我使用后台线程来同步数据,并且我使用子NSManagedObjectContext 和NSPrivateQueueConcurrencyType 作为后台线程。尽我所能从关于核心数据和线程的 Apple 文档中得知,我已经正确设置了所有内容,以及如何在我的线程中使用 NSManagedObjectContext。这是我遇到的问题。
- 在后台,同步过程会拉下轨迹的新坐标并更新子上下文中轨迹的坐标。
- 在主线程上,用户通过跟踪更多轨迹来更改轨迹。这些新坐标使用
NSMainQueueConcurrencyType保存到父上下文中。 - 所以现在主线程上下文有了新坐标,同步线程上下文有了新坐标。
- 然后同步线程保存其上下文并将坐标保存到父上下文。
- 然后主线程保存其上下文。保存主上下文上的新坐标并将它们添加到有序的一对多关系中。它们未保存在有序关系中的正确位置。
- 这会使路径“跳跃”。查看屏幕截图中的黑色轨迹。
这似乎 Core Data 正在做正确的事情。它不会删除任何新对象,它们都被添加到关系中。但是,在这种情况下,我只想从其中一个上下文中获取一组坐标,而不是将它们合并在一起。我找不到办法做到这一点。我现在解决这个问题的方法是将轨迹的对象 ID 和所有坐标传递给主线程并将它们保存在那里。我不想在主线程上做这项工作,这完全是 hack。有人知道更好的解决方案吗?
【问题讨论】:
-
我不确定我的 NSManagedObjectContext 配置是否正确。你能列出你的 NSManagedObjectContext 的父子节点以及并发类型吗?