【问题标题】:Did Apple change NSUserDefaults sharing from iOS app to watchOS appApple 是否将 NSUserDefaults 共享从 iOS 应用更改为 watchOS 应用
【发布时间】:2017-07-01 11:33:11
【问题描述】:

我想问一下如何在 watchOS 应用上使用NSUserDefaults。 它的数据和iOS应用的NSUserDefaults的数据有区别吗?

Therearealotofstackoverflow 关于这个主题的问题,他们都有相同的答案。比如说

观看使用共享组与其 iOS 应用共享数据的应用 必须重新设计容器以不同方式处理数据。在 watchOS 2 中, 每个进程必须在本地管理自己的任何共享数据的副本 容器目录。对于实际共享和更新的数据 这两个应用程序,这需要使用 Watch Connectivity 框架来 在它们之间移动数据。

但是,所有引用的文字都从the web page referred 中消失了,请参阅this accepted answer

相反,在当前Apple Docs。有

此外,iOS 会自动转发您的 iOS 的只读副本 应用程序对 Apple Watch 的偏好。您的 WatchKit 扩展可以读取 这些首选项使用 NSUserDefaults 对象,但它不能使 直接更改默认数据库。

我有两个问题:

  • 哪个是正确的:我上面提到的所有 StackOverflow 问题的答案,或者 Apple Docs

  • iOS 使用哪种机制将 NSUserDefaults 对象转发到 watchOS 应用程序?未来发展是否可靠,数据的最新程度如何?近期会否弃用此功能?

非常感谢

【问题讨论】:

    标签: ios nsuserdefaults watchkit apple-watch watchos-2


    【解决方案1】:

    要回答您的第一个问题,您从 StackOverflow 和 Apple 引用的两个答案都是正确的。 Apple 将 iOS 应用程序的 NSUserDefaults 转发为只读值,但手表有自己的 NSUserDefaults 以供其偏好。该文档的主要内容是让手表应用远离使用NSUserDefaults 的共享容器组(因为这就是WatchKit 应用的实现方式)。在watchOS 中,Apple 添加了WatchConnectivity,这是iOS 和手表应用程序之间共享数据的标准。

    要回答您的第二个问题,请使用 NSUserDefaults,因为您通常会分别存储与每个应用相关的首选项,并使用 WatchConnectivity 在应用之间共享数据。

    【讨论】:

    • 这将是不同的问题。从 Watch Kit 应用程序更改/更新 iOS'NSUserDefaults。我将使用sendMessage:replyHandler:errorHandler:,等待replyHandler: 响应iOS 更新自己的NSUserDefaults,然后使用手表上最新的NSUserDefaults 数据。 sendMessage:replyHandler:errorHandler: 在这种情况下是否合适。非常感谢
    • @tranvansang 是的,这是一种方法。如果iOS端的更新可以在后台进行,您也可以使用transferUserInfo(_:)developer.apple.com/reference/watchconnectivity/wcsession/…。如果手表正在向 iOS 应用程序更新某些内容,就您的流程而言,不要等待再次阅读 NSUserDefaults。只需将您的更新发送到 iOS 应用程序,然后适当地更新手表,而无需再次读取默认值。手表应该充当自己的应用程序。发送消息并根据更新采取行动。希望对您有所帮助。
    • 感谢您的回复。 transferUserInfo 无法确保手机上的数据已更新。随后的NSUserDefaults 读取可能会返回意外的非最新数据。顺便说一句,我认为选择传输方法需要权衡
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2020-03-13
    • 1970-01-01
    • 2020-01-06
    • 1970-01-01
    相关资源
    最近更新 更多