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



我以前这样做过,但似乎没有任何工作。下面是我的代码:

在iOS App中保存

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

Reading(支持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
}

两个。entitlement文件都包含group.company.appSharedDefaults

App Groups功能已经打开,并且在两个目标上都勾选了适当的组。

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

我错过了什么!?

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

  1. Apple Watch Process
  2. <
  3. iPhone过程/gh>

这两个进程都有自己的沙盒,这就是为什么他们叫它"原生",所以如果你试图使用共享的NSUserDefaults,它将无法工作,因为Apple watch应用程序有一个完全不同于宿主iPhone应用程序的沙盒。

如果你想把一些东西从你的手机保存到Apple watch的NSUserDefaults目标:

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

最新更新