2014-09-13 89 views
10

在应用程序中,我可以选择使用三种语言的设置。如果未选择任何内容,则会检测iPhone语言并选择英语,法语或德语。如果这些语言都不是iPhone语言,则设置为使用英语。在设置中手动更改语言的工作方式应该如此。现在我添加了一个今天的扩展,它几乎工作正常,但我需要访问settings-bundle以获取语言的NSUserDefaults(如果手动更改)。在这两个目标我激活的应用程序组与从今天开始访问settings.bundle - 分机

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 today [3734: 284836]设置 - 语言:(空)

我该怎么做才能正确/如何访问设置(settings.bundle)?

+0

你找到一个解决方案? – 2014-10-04 12:25:44

+0

不是。要在更改设置后在扩展程序中使用选定的语言,我必须启动应用程序,然后更改将保存为扩展名。 – Christian 2014-10-06 03:02:27

回答

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"]];

,那么你将能够访问您的在你的扩展中共享容器并获取这些值。

如果有人有更好的做法,我会很高兴知道。

2

如果创建WatchKit喜好束,它也包含了关键

ApplicationGroupContainerIdentifier 

在束的Root.plist的字典的根级别,取值为组标识符(你提供什么NSUserDefaults的作为suiteName)。

我发现你也可以在iOS设置包中使用这个键。如果添加,首选项将转到相应的容器。

我对此进行了验证,可在iOS设置应用程序,iPhone应用程序和WatchKit扩展模块上的iOS 8.3上运行。

UPDATE:为支持的iOS 8.2苹果列出了此键,后来在 https://developer.apple.com/library/ios/documentation/PreferenceSettings/Conceptual/SettingsApplicationSchemaReference/Articles/RootContent.html