这在watchOS 1上不是问题,但是现在在watchOS 2上我无法读取手表扩展上的值。
根据Apple docs,这是可能的。 据this thread的一些人说,这是可能的。 根据{{3}}上的Apple员工的说法,这是可能的。
据我所知,我正确设置一切:
ApplicationGroupContainerIdentifier
相同的内容
plist的标识符当我使用标识符作为套件名称初始化NSUserDefaults
对象时,我无法读取监视扩展名上的值。我可以在iOS应用程序上阅读它们。这发生在模拟器和真实设备中。
请不要发布有关如何使用Watch Connectivity执行此操作的答案。可以在没有Watch Connectivity的watchOS 2上使用共享应用程序组执行此操作,人们可以执行此操作,这里直接来自this thread:
在watchOS 2中,您的WatchKit扩展程序可能会读取首选项的值,但您无法编写新值。 watchOS 2中的首选项从iOS转发到Apple Watch,但您所做的任何修改都不会发送回iOS。
答案 0 :(得分:7)
我已经编辑了我的答案。之前,它谈到了无法使用App Groups在watchOS 2中同步数据,但您的具体问题是关于设置包,它仍然可以从iOS同步在WatchOS 2中使用Apple Watch。
我无法在Simulator中使用Xcode 7.1 / 7.2,但它确实可以在真实设备上运行。来自文档:
watchOS 2中的首选项从iOS转发到Apple Watch,但您所做的任何修改都不会发送回iOS。在watchOS 1中,WatchKit扩展可以直接访问默认数据库,并可以读取和写入值。
所有3个目标应该配置相同的应用程序组(此处的Watch App目标似乎是OP问题中缺少的组件):
我的设置包
InterfaceController.swift
中的一些简单界面代码:
@IBOutlet var label: WKInterfaceLabel!
@IBAction func buttonAction() {
let sharedDefaults = NSUserDefaults.init(suiteName: "group.testSettings")
let name_preference = String(sharedDefaults?.objectForKey("name_preference"))
self.label.setText(name_preference)
}
以及最终结果:
因此,它确实按预期工作,但不在Simulator中。似乎模拟器中的两个设备之间存在一些隔离,并且试图准确地指出那里正在发生的事情,这有点令人沮丧。
答案 1 :(得分:0)
这是因为应用程序现在在Apple Watch上运行,这意味着它们无法从iPhone获取设置,因为设置不再存储在同一设备上。更多信息:Unable to get values from settings bundle in watchOS 2
答案 2 :(得分:-1)
使用`WCSessions处理的新过程可以在下面提到的文件中的示例Apple app - Lister中看到。
此外,https://stackoverflow.com/a/32628105/1640786中提到的答案似乎使整个过程更加方便。