ios - WatchKit 和 iOS App 的核心数据

标签 ios core-data synchronization ios-app-extension watchkit

这个问题已经有人问过了,但是收到了no answers .

我的 iOS 应用程序和我的 WatchKit 扩展共享一个应用程序组,其中保留了核心数据存储。 Core Data 模型(简化)是一个具有 Age 属性的 Person 对象。应用程序和扩展程序都可以随意更改年龄。

如果某个人的值在 watch 上发生变化,除非我关闭并重新运行应用程序,否则应用程序不会反射(reflect)它。同向反方向。

如果我尝试将 watch 上的年龄更改为 20 岁,并将手机上的年龄更改为 30 岁,那么我会收到与合并冲突有关的错误,因为我没有使用最新的其中一台设备上的 NSManagedObject 版本(以我最后更改年龄为准)。

我怎样才能让两者毫无问题地协同工作?

最佳答案

由于不会在不同进程之间获取通知,因此您需要改用 Darwin 通知。您可以轻松地使用 openParentApplication:reply: 方法将更新从 Watch Extension 发送到 iOS App,但 Apple 没有办法将事件从 iOS App 发送到 Watch Extension。

我建议您使用 MMWormhole (或者您自己的 Darwin 通知的实现)在核心数据对象更新时发送 Darwin 通知。 Here是一篇详细介绍图书馆工作原理的文章。

如果您在 Watch Extension 中更新核心数据对象,则向 iOS 应用程序发送 Darwin 通知(或传递消息),告诉应用程序它需要刷新核心数据对象。同样的方法可以用于另一个方向,从 iOS App 到 Watch Extension。

此外,如果您的对象真的很简单,那么 CoreData 可能就有点矫枉过正了。您可以使用 MMWormhole 来简单地缓存在两端使用的轻量级字典。我已经使用这种方法几个星期了,它在两个方向上都完美无缺。

关于ios - WatchKit 和 iOS App 的核心数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28802719/

相关文章:

立即调用 Shutdown 时 http.Server Serve 方法挂起

ios - 我的本地 JSON 序列化/解析不起作用?

objective-c - LIKE 和 CONTAINS[cd] 有什么区别?

iphone - 由于libdispatch-manager而崩溃

Java wait() 不抛出 InterruptedException

go - 将 websocket 循环与 Golang 中的 channel 同步

ios - NSMutableParagraphStyle 在表格单元格中为 uilabel(对齐异常)自动高度

ios - 您如何初始化和呈现自定义 SLComposeServiceViewController?

ios - 按钮操作后 TableView 未更新

ios - CoreData 堆栈 [child(background)/parent(thread 1)] setup mergeChangesFromContextDidSaveNotification 不更新 UI(tableview)