这个问题已经被问过,但已收到没有答案 https://stackoverflow.com/questions/27791594/watchkit-core-data-sync-up.
我的 iOS 应用程序和 WatchKit 扩展共享一个应用程序组,其中保留了核心数据存储。核心数据模型(简化)是一个具有年龄属性的 Person 对象。应用程序和扩展程序都可以随意更改年龄。
如果手表上某人的值发生变化,除非我关闭并重新运行应用程序,否则应用程序不会反映它。反方向也是一样。
如果我尝试将手表上的年龄更改为 20,并将手机上的年龄更改为 30,那么我会收到与合并冲突有关的错误,因为我没有使用最新版本的其中一台设备上的 NSManagedObject(以我最后更改的年龄为准)。
我怎样才能让两者一起工作而不出现任何问题?
由于不会在不同进程之间接收通知,因此您需要使用 Darwin 通知。您可以轻松地使用openParentApplication:reply:
方法将更新从 Watch Extension 发送到 iOS 应用程序,但 Apple 没有办法将事件从 iOS 应用程序发送到 Watch Extension。
我建议你使用毫米波虫洞 https://github.com/mutualmobile/MMWormhole(或者您自己的 Darwin 通知实现)在 Core Data 对象更新时发送 Darwin 通知。Here http://www.mutualmobile.com/posts/mmwormhole是一篇详细介绍该库如何工作的文章。
如果您更新 Watch Extension 中的 Core Data 对象,则向 iOS 应用程序发送 Darwin 通知(或传递消息),告诉应用程序需要刷新 Core Data 对象。同样的方法也可以用于另一个方向,从 iOS 应用程序到手表扩展。
此外,如果您的对象非常简单,那么 CoreData 可能就有点矫枉过正了。您可以使用 MMWormhole 来简单地缓存在两端使用的轻量级字典。我已经使用这种方法几个星期了,它在两个方向上都完美无缺。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)