一尘不染

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

swift

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

在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上运行读取的代码时,返回nil,但它在iOS上有效(设备和模拟器的结果相同)。

我想念什么!?


阅读 294

收藏
2020-07-07

共1个答案

一尘不染

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

  1. Apple Watch流程
  2. iPhone程序

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

如果要将手机中的内容保存到Apple Watch Target上的NSUserDefaults中,请执行以下操作:

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

2020-07-07