6

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

保存在 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

应用程序组功能已打开,并在两个目标上检查了适当的组。

现在,当我在手表上运行读取代码时 objectForKey 返回 nil 但它适用于 iOS(设备和模拟器结果相同)。

我错过了什么!?

4

1 回答 1

12

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

  1. 苹果手表流程
  2. iPhone 流程

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

如果您想将手机中的某些内容保存到 Apple watch Target 上的 NSUserDefaults:

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

于 2015-09-03T20:06:06.260 回答