设置包不能在watchOS 2上运行

spy*_*art 8 nsuserdefaults ios ios-app-group watchkit

这在watchOS 1上不是问题,但现在在watchOS 2上我无法读取手表扩展上的值.

根据Apple文档,这是可能的.根据这个帖子的一些人的说法,这是可能的.根据这个线程上的Apple员工的说法,这是可能的.

据我所知,我正确地设置了所有内容:

  • 我在iOS应用上启用了App Groups,并使用相同的标识符来观看扩展.
  • 我将Settings-Watch.bundle添加到iOS应用程序中,并ApplicationGroupContainerIdentifier为plist 添加了相同的标识符

当我NSUserDefaults使用标识符作为套件名称初始化对象时,我无法读取监视扩展名上的值.我可以在iOS应用程序上阅读它们.这发生在模拟器和真实设备中.

请不要发布有关如何使用Watch Connectivity执行此操作的答案.只有在没有Watch Connectivity的watchOS 2上的共享应用程序组才能实现这一点,人们可以做到这一点,而这里直接来自文档:

在watchOS 2中,您的WatchKit扩展可能会读取首选项的值,但您无法编写新值.watchOS 2中的首选项从iOS转发到Apple Watch,但您所做的任何修改都不会发送回iOS.

Cha*_*ser 8

我编辑了我的答案.之前,它谈到了无法使用应用程序组在watchOS 2中同步数据,但您的具体问题是关于设置包,它仍然在iOS OS中与iOS 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)
}
Run Code Online (Sandbox Code Playgroud)

最后的结果:

在此输入图像描述 在此输入图像描述

因此,它确实按预期工作,而不是在模拟器中.似乎模拟器中的两个设备之间存在一些隔离,并且试图准确地指出那里正在发生的事情,这有点令人沮丧.