保持核心数据与多个手表同步

dji*_*i33 2 ios watchkit watchos watchos-2 watchconnectivity

我正在编写 iPhone 和 Watch 应用程序。我计划支持将多个手表与手机配对的功能。

iPhone 和 Watch 应用程序都将读取和写入核心数据数据存储,我将使用WatchConnectivity它们来保持同步(使用transferUserInfo:)。用户将在一个设备上书写/口述某些内容,然后它会出现在另一台设备上。

我正在努力弄清楚如何支持多个手表。鉴于以下场景:

  • 用户正在使用电话/手表A
    • 在一天中,用户添加了 10 个项目
  • 一天结束,他们切换到 WatchB

WatchB 如何与 Phone/WatchA 同步?

  • WKSession 会自动重放transferUserInfoWatchA 配对时的调用吗?
  • 我是否需要以某种方式跟踪 WatchB 需要的所有内容并自己重播所有内容?
  • 我是否只使用transferFileAPI发送整个 sqlite 数据库(这似乎有点多)?

小智 5

WKSession 会自动重放 WatchA 配对时进行的 transferUserInfo 调用吗?

不,不会。数据只会传输到配对的手表。

当您切换回另一只手表时,您必须专门安排更新其商店。

我是否需要以某种方式跟踪 WatchB 需要的所有内容并自己重播所有内容?

简而言之,是的,如果这是您采取的方法。

一种极端情况是,如果用户用新的/更换的手表更换旧的/坏的手表,但没有取消旧手表的配对。对于永远不会再次配对的手表,您不会想要跟踪越来越多的变化。

您还必须处理用户升级手机并将现有手表与新手机配对的情况。您的设备跟踪和同步应继续跨不同的设备对工作。

我是否只使用 fileTransfer API 发送整个 sqlite 数据库(这似乎有点多)?

这实际上取决于数据库的大小,以及在三个或更多存储之间记录和同步数据的复杂性。

哪些新功能可以帮助我让我的手表保持最新状态?

如果您必须维护多个商店,那么您绝对应该利用 watchOS 3 中的后台刷新任务功能在用户启动应用程序之前让您的手表保持最新状态,这样用户就不必等待任何要同步的东西。

即使您没有使用复杂功能,此答案也可能会有所帮助

我的其他选择是什么?

Apple 建议您围绕与设备交互的不同方式进行设计。用户可能只想看一眼手表几秒钟来查看一些项目,但要依靠手机来完成更复杂的任务。

在这种情况下,你可以在 iPhone 上维护一个单一的存储,并从 iPhone 传输任何需要的数据以显示在手表上。如果有任何变化,请将更新的数据推送回手机。

“切换”方法效果最好,手机和手表知道最近的项目是什么,并且用户可以在白天在手机和手表之间切换。

当然,这取决于手表是否必须在手机范围外独立运行。