在应用程序中,我可以在设置中选择应使用哪种语言。如果未选择任何内容,则会检测并选择iPhone语言为英语,法语或德语。如果这些语言都不是iPhone语言,则设置为使用英语。手动更改设置中的语言可以正常工作。现在我添加了一个今天的扩展,它运行得很好但我需要访问settings-bundle来获取语言的NSUserDefaults(如果手动更改)。在这两个目标中,我使用
激活了App-Groupsgroup.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)?
答案 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"]];
然后您将能够访问您的扩展中的共享容器并获取这些值。
如果有人有更好的方法,我也很乐意知道。