11

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

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

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

4

2 回答 2

3

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

ApplicationGroupContainerIdentifier

在捆绑包的 Root.plist 的字典的根级别,其值为组标识符(您作为套件名称提供给 NSUserDefaults 的内容)。

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

我在 iOS 设置应用程序、iPhone 应用程序和 WatchKit 扩展程序中验证了这可以在 iOS 8.3 上运行。

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

于 2015-06-24T14:27:23.060 回答
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"]];

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

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

于 2014-09-18T16:28:51.647 回答