问题
I've done this before but nothing seems to be working. Here's my code:
Saving in the iOS App
let groupDefaults = NSUserDefaults(suiteName: "group.company.appSharedDefaults")
groupDefaults?.setObject(theArray, forKey: "theKey")
groupDefaults?.synchronize()
Reading (works on iOS but not WatchOS 2)
let groupDefaults = NSUserDefaults(suiteName: "group.company.appSharedDefaults")
if groupDefaults!.objectForKey("theKey") != nil {
textEmojiArray = NSMutableArray(array: groupDefaults!.objectForKey("theKey") as! NSArray)
} else {
//error
}
Both .entitlements files contain group.company.appSharedDefaults
App Groups capability have been turned on and appropriate group checked off on both targets.
Right now when I run the read code on the watch objectForKey returns nil but it works on iOS (device and simulator results are the same).
What am I missing!?
回答1:
In watchOS 2 you need to keep in mind that there is 2 different processes running:
- Apple Watch Process
- iPhone Process
Both of these processes have their own sandbox that's why they call it "native", so if you try to use the shared NSUserDefaults it will not work because the Apple watch app has a completely different sandbox than the host iPhone app.
If you want to save something from your phone to the NSUserDefaults on the Apple watch Target:
Use WatchConnectivity to send the data you want to save to the watch. Then when the watch receives the data you sent to it, save it to the Apple watch's default NSUserDefaults.
来源:https://stackoverflow.com/questions/32367244/nsuserdefaultssuitename-on-ios-9-and-watchos-2-not-working