swift – 在iOS 8共享扩展程序和主应用程序之间共享数据

前端之家收集整理的这篇文章主要介绍了swift – 在iOS 8共享扩展程序和主应用程序之间共享数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近,我一直在做一个简单的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存储。

所以,

>这个方法解决方案吗?
>如何在包含应用程序和共享扩展名之间共享简单的数据?数据只是API的用户凭据。

你应该使用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);

这将工作得很好!

猜你在找的Swift相关文章