最近,我一直在做一个简单的iOS 8共享扩展来了解系统的工作原理。正如苹果在
App Extension Programming Guide年:
By default,your containing app and its extensions have no direct access to each other’s containers.
这意味着扩展和包含应用程序不共享数据。但在同一页苹果带来了一个解决方案:
If you want your containing app and its extensions to be able to share data,use Xcode or the Developer portal to enable app groups for the app and its extensions. Next,register the app group in the portal and specify the app group to use in the containing app.
然后,可以使用NSUserDefaults在包含应用程序和扩展之间共享数据。这正是我想做的。但由于某种原因,它不工作。
在同一页面中,Apple建议使用标准默认值:
var defaults = NSUserDefaults.standardUserDefaults()
在WWDC演示(217)中,他们建议一个通用包:
var defaults = NSUserDefaults(suiteName: kDefaultsPackage)
此外,我针对包含应用程式目标和扩充功能目标的应用程式群组启用了同一个应用程式群组名称:
但所有这些设置是无所事事。我无法从扩展名检索存储在包含应用程序中的数据。这就像两个目标使用完全不同的NSUserDefaults存储。
所以,
你应该使用NSUserDefaults这样:
保存数据:
NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.yougroup"]; [shared setObject:object forKey:@"yourkey"]; [shared synchronize];
读取数据:
NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.yougroup"]; id value = [shared valueForKey:@"yourkey"]; NSLog(@"%@",value);
这将工作得很好!