2014-09-13 49 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