Sharing data between an iOS 8 share extension and main app
You should use NSUserDefaults like this:
Save data:
objc
NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.yougroup"];[shared setObject:object forKey:@"yourkey"];[shared synchronize];
swift
let defaults = UserDefaults(suiteName: "group.yourgroup")defaults?.set(5.9, forKey: "yourKey")
Read data:
objc
NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.yougroup"];id value = [shared valueForKey:@"yourkey"];NSLog(@"%@",value);
swift
let defaults = UserDefaults(suiteName: "group.yourgroup")let x = defaults?.double(forKey: "yourKey")print(x)
This will work fine!
Here is how I did it:
- Open your main app target > Capabilities > App Groups set to on
- Add a new app group and make sure it is ticked (e.g. group.com.seligmanventures.LightAlarmFree)
- Open your watch target (the one with Capabilities tab) > App Groups set to on
- Add a new app group and make sure it is ticked (e.g. group.com.seligmanventures.LightAlarmFree - but must be the same name as group above)
Save data to the group as follows:
var defaults = NSUserDefaults(suiteName: "group.com.seligmanventures.LightAlarmFree")defaults?.setObject("It worked!", forKey: "alarmTime")defaults?.synchronize()
Retrieve data from the group as follows:
var defaults = NSUserDefaults(suiteName: "group.com.seligmanventures.LightAlarmFree") defaults?.synchronize()// Check for null value before settingif let restoredValue = defaults!.stringForKey("alarmTime") { myLabel.setText(restoredValue)}else { myLabel.setText("Cannot find value")}
If you have
group.yourappgroup
use
var defaults = NSUserDefaults(suiteName: "yourappgroup")
This works for me