erd*_*ser 6 synchronization core-data ios ios-app-extension watchkit
这个问题已经被提出,但没有得到答案.
我的iOS应用程序和我的WatchKit扩展程序共享一个应用程序组,其中核心数据存储仍然存在.核心数据模型(简化)是具有Age属性的Person对象.应用和扩展程序都可以随意更改年龄.
如果某人的值在手表上发生变化,则除非我关闭并重新运行该应用,否则该应用不会反映该值.相反的方向相反.
如果我尝试将手表上的年龄更改为20,并将手机上的年龄更改为30,那么我会收到与合并冲突有关的错误,因为我没有使用最新版本的其中一台设备上的NSManagedObject(取决于我最后一次更改的年龄).
如何在没有任何问题的情况下使两者协同工作?
由于不会在不同进程之间接收通知,因此您需要使用 Darwin 通知。您可以轻松地使用该openParentApplication:reply:方法将更新从 Watch Extension 发送到 iOS 应用程序,但 Apple 没有办法将事件从 iOS 应用程序发送到 Watch Extension。
我建议您在核心数据对象更新时使用MMWormhole (或者您自己的 Darwin 通知实现)发送 Darwin 通知。这是一篇详细介绍该库如何工作的文章。
如果您更新 Watch Extension 中的 Core Data 对象,则向 iOS 应用程序发送 Darwin 通知(或传递消息),告诉应用程序需要刷新 Core Data 对象。同样的方法也可以用于另一个方向,从 iOS 应用程序到手表扩展。
此外,如果您的对象非常简单,那么 CoreData 可能就有点矫枉过正了。您可以使用 MMWormhole 来简单地缓存在两端使用的轻量级字典。我已经使用这种方法几个星期了,它在两个方向上都完美无缺。
| 归档时间: |
|
| 查看次数: |
1883 次 |
| 最近记录: |