iOS 9 和 WatchOS 2 上的 NSUserDefaults(suiteName:) - 不工作?

NSUserDefaults(suiteName:) on iOS 9 and WatchOS 2 - not working?

我以前做过,但似乎没有任何效果。这是我的代码:

在 iOS 应用程序中保存

let groupDefaults = NSUserDefaults(suiteName: "group.company.appSharedDefaults")
groupDefaults?.setObject(theArray, forKey: "theKey")
groupDefaults?.synchronize()

阅读(适用于 iOS 但不适用于 WatchOS 2)

let groupDefaults = NSUserDefaults(suiteName: "group.company.appSharedDefaults")

if groupDefaults!.objectForKey("theKey") != nil {
    textEmojiArray = NSMutableArray(array: groupDefaults!.objectForKey("theKey") as! NSArray)
} else {        
    //error
}

两个 .entitlements 文件都包含 group.company.appSharedDefaults

应用程序组功能已打开,并且在两个目标上都勾选了相应的组。

现在当我运行 watch objectForKey 上的读取代码returns nil 但它在iOS 上工作(设备和模拟器结果相同)。

我错过了什么!?

在 watchOS 2 中,您需要记住有 2 个不同的进程 运行:

  1. Apple Watch 进程
  2. iPhone 进程

这两个进程都有自己的沙箱,这就是他们称之为 "native" 的原因,所以如果您尝试使用共享的 NSUserDefaults,它将无法工作,因为 Apple Watch 应用程序与主机有完全不同的沙箱iPhone 应用程序。

如果您想将 phone 中的内容保存到 Apple watch 目标上的 NSUserDefaults:

使用WatchConnectivity将您要保存的数据发送到手表。 然后手表收到你发给它的数据时,保存到Apple watch默认的NSUserDefaults.