【问题标题】:How best to transfer NSManagedObjects from iPhone to Watch如何最好地将 NSManagedObject 从 iPhone 传输到 Watch
【发布时间】:2023-03-15 05:31:01
【问题描述】:

我正在从 Swift 1.2 到 Swift 2 重新创建我的应用程序,在前者中我使用共享组等。

我现在正在尝试使用新的 WatchConnectivity,但遇到了一堵大砖墙..!!

在手机上,我的应用程序正在下载 json 并填充到我的数据存储中的 NSManagedObjects 中,并且一切正常……在手机上。

虽然我可以使用 session.updateApplicationContext(dictionary) 方法,但我很愚蠢......但现在发现了

  1. 我必须使用 NSCoding
  2. NSCoding 和 NSManagedObjects 不是很好的匹配!

请问,iOS9 和 Swift 2 中将 CoderData 数据从手机传输到手表的首选方式是什么?

请注意,手表无需修改、更新等数据,因为这一切都发生在手机上。手表只是显示它。

提前谢谢....

【问题讨论】:

    标签: core-data swift2 ios9 watchos-2 watchconnectivity


    【解决方案1】:
    1. 新建一个NSBinaryStoreType类型的临时存储,克隆NSManagedObjects转移到新存储。
    2. 保存临时存储。
    3. 使用[WCSession transferFile:metadata:]到临时文件,或使用[WCSession updateApplicationContext:][NSData dataWithContentsOfFile:]的其他传输方式。

    使用NSBinaryStoreType 的主要原因是它将占用受支持类型中最小的文件大小。

    第二个原因是NSSQLiteStoreType 默认需要额外的shmwal 文件。它使核心数据变得更快,但它需要复杂的处理并且需要更多的文件大小。


    PS。如果你决定使用[WCSession transferFile:metadata:],你必须在传输完成后删除临时文件。

    【讨论】:

    • 感谢您的回答,但在周末我有一个“灯泡”时刻(现在)不需要传递任何 CoreData 对象!我意识到我只需要发送要出现在手表列表中的托管对象的文本以及用户点击给定行时的 id(不是 managedobjectid)。然后手表会进行另一个调用并请求文本以显示该选定对象的详细信息。我想当我使用 CoreData 时,我想我也需要在手表上使用它......但不是这样!感谢您的回复,在此基础上投票支持您。
    • 很高兴听到您找到了自己的解决方案。我认为您可能应该考虑不可访问(或云连接)的情况。典型的手表应用程序自己缓存数据以供离线使用。
    • 谢谢 ;-) 我现在可以使用交互式消息使其正常工作,因为它可以立即工作。所以我现在可以发送一个只包含我感兴趣的字符串值的字典,手表不需要托管对象,所以这可以工作。花了我一段时间,但到了那里!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    相关资源
    最近更新 更多