苹果是否将NSUserDefaults共享从iOS应用程序更改为watchOS应用程序?

3

我想询问如何在watchOS应用程序中使用NSUserDefaults。它的数据是否与iOS应用程序的NSUserDefaults数据不同?

这里 很多 关于这个主题的 stackoverflow问题,所有这些问题都有相同的答案。 也就是说,例如

使用共享组容器与其iOS应用程序共享数据的手表应用程序必须重新设计以处理数据。在watchOS 2中,每个进程必须管理本地容器目录中任何共享数据的自己的副本。对于实际由两个应用程序共享和更新的数据,这需要使用Watch Connectivity框架在它们之间移动数据。
然而,所有引用的文本都从网页 the web page referred 中消失了,请参见this accepted answer
相反,在当前的Apple Docs中有以下内容:
此外,iOS会自动将您的iOS应用程序的只读副本转发到Apple Watch。您的WatchKit扩展可以使用NSUserDefaults对象读取这些首选项,但不能直接更改默认数据库。
我的两个问题是:
  • 哪一个是正确的:我上面提到的所有StackOverflow问题的答案,还是Apple文档?

  • iOS使用哪种机制将NSUserDefaults对象转发到watchOS应用程序?这个机制可靠吗,可以依赖于未来的开发,并且数据更新到最近有多久?这个功能在不久的将来可能会被弃用吗?

非常感谢

1个回答

3
回答你的第一个问题,StackOverflow和Apple提供的两个回答都是正确的。苹果公司将iOS应用程序的NSUserDefaults作为只读值转发,但手表有自己的NSUserDefaults用于其偏好设置。文档的主要观点是让手表应用程序远离使用NSUserDefaults的共享容器组(因为这是WatchKit应用程序的实现方式)。在watchOS中,苹果公司添加了WatchConnectivity,它是在iOS和手表应用程序之间共享数据的标准。
回答你的第二个问题,像往常一样依靠NSUserDefaults来存储与每个应用程序独立相关的首选项,并使用WatchConnectivity来在应用程序之间共享数据。

如何从Watch Kit应用程序更改/更新iOS的“NSUserDefaults”。我将使用“sendMessage:replyHandler:errorHandler:”方法,等待“replyHandler:”响应,以便“iOS”更新其自己的“NSUserDefaults”,然后在手表上利用最新的“NSUserDefaults”数据。在这种情况下,“sendMessage:replyHandler:errorHandler:”是否适用?非常感谢。 - transang
@tranvansang 嗯,那是一种方法。如果iOS端的更新可以在后台进行,也可以使用transferUserInfo(_:) https://developer.apple.com/reference/watchconnectivity/wcsession/1615671-transferuserinfo 。另外,如果手表正在向iOS应用程序更新某些内容,请不要等待再次读取NSUserDefaults。只需将更新发送到iOS应用程序,并相应地更新手表,而无需再次读取默认值。手表应该作为自己的应用程序。发送消息并根据更新执行操作。希望这有所帮助。 - lostAtSeaJoshua
感谢回复。transferUserInfo 无法确保数据已在手机上更新。随后的 NSUserDefaults 读取可能会返回意外的不是最新的数据。顺便说一下,我认为选择传输方法存在权衡。 - transang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接