从today-extension访问settings.bundle

时间:2014-09-13 15:06:57

标签: ios ios8 settings.bundle today-extension

在应用程序中,我可以在设置中选择应使用哪种语言。如果未选择任何内容,则会检测并选择iPhone语言为英语,法语或德语。如果这些语言都不是iPhone语言,则设置为使用英语。手动更改设置中的语言可以正常工作。现在我添加了一个今天的扩展,它运行得很好但我需要访问settings-bundle来获取语言的NSUserDefaults(如果手动更改)。在这两个目标中,我使用

激活了App-Groups
group.com.companyname.appname

并选择它。

在应用程序中,我使用

获取语言
NSString *manualLanguageSet = [[NSUserDefaults standardUserDefaults] valueForKey:SPRACHWAHL];

在今天的扩展中,我试图通过:

NSString *manualLanguageSet = [[[NSUserDefaults alloc] initWithSuiteName:@"group.com.companyname.appname"] valueForKey:SPRACHWAHL];

对于NSLog(@"Settings-Sprache: %@", manualLanguageSet);运行今日延期时,结果是(在设置中选择了哪种语言并不重要)

  

2014-09-13 16:48:36.331今日HdB [3734:284836]设置 - Sprache:(null)

我能做什么更正/如何访问设置(settings.bundle)?

2 个答案:

答案 0 :(得分:3)

如果您创建了WatchKit首选项包,它还包含密钥

TIME+

在bundle的Root.plist的字典的根级别,其值为组标识符(您将NSUserDefaults作为suiteName提供的内容)。

我发现您也可以在iOS设置包中使用此密钥。如果添加,首选项将转到相应的容器。

我通过iOS设置应用,iPhone应用和WatchKit扩展程序对iOS 8.3进行了验证。

更新:Apple列出了iOS 8.2及更高版本支持的此密钥 https://developer.apple.com/library/ios/documentation/PreferenceSettings/Conceptual/SettingsApplicationSchemaReference/Articles/RootContent.html

答案 1 :(得分:2)

我也在寻找它。我知道如何做的唯一方法是通过SharedContainer。在你的例子中,你应该打开你的

[[[NSUserDefaults alloc] initWithSuiteName:@"group.com.companyname.appname"] valueForKey:SPRACHWAHL];

在容器应用中,然后从容器应用的NSUserDefaults复制语言值,如下所示:

[[[NSUserDefaults alloc] initWithSuiteName:@"group.com.companyname.appname"] setObject:[NSUserDesaults standardUserDefaults] objectForKey:SPRACHWAHL] forKEY:@"Your Key in extension"]];

然后您将能够访问您的扩展中的共享容器并获取这些值。

如果有人有更好的方法,我也很乐意知道。