2012-11-18 104 views
2
同步起來

可能重複:
Multivalue type settings bundle fields alway return null設置捆綁不NSUserDefaults的

我有一個設置在我的iOS應用,它產生的設置如下表捆綁app

在我的應用程序中,我嘗試使用NSUserDefaults生成相同的表格,並以this

我的代碼來獲取值走的是:

NSUserDefaults* userDefaults = [NSUserDefaults standardUserDefaults]; 
ds->use_cache = [userDefaults boolForKey:@"use_cache"]; 
ds->high_bitrate = [userDefaults boolForKey:@"high_bitrate"]; 

NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; 
[[cell detailTextLabel] setText:[defaults stringForKey:@"version"]]; 

用鑰匙將stringForKey 「版本」 總是返回空值。我似乎無法讓我的應用識別我在設置包中定義的默認參數。

這裏是我的設置bundle

回答

3

爲設置的默認值應該用registerDefaults:方法來設置。這設置了一個NSRegistrationDomain,它們將從中可用。下面是一個例子。感謝jrturton & Matthias Bauch指出我的第一個問題,之前提到http://greghaygood.com/2009/03/09/updating-nsuserdefaults-from-settingsbundle

NSDictionary *appDefaults = [ NSDictionary 
           dictionaryWithObject:@"default_version_value" forKey:@"version" ]; 

[ [ NSUserDefaults standardUserDefaults ] registerDefaults:appDefaults ]; 

NSUserDefaults *userDefaults = [ NSUserDefaults standardUserDefaults ]; 

還要注意這些默認值需要在每次啓動應用程序作爲registerDefaults:文檔中規定的時間進行設置。

註冊域的內容不寫入磁盤;每次啓動應用程序時都需要調用此方法。您可以在應用程序的資源目錄中放置一個plist文件,並調用registerDefaults:您從該文件讀入的內容。

+0

是不是隻是一個漫長而乏味的'registerDefaults:'手動版本,這是真正的答案? – jrturton

+0

這更糟,然後['registerDefaults:'](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html#//apple_ref/doc/ uid/20000318-CIHDDCDB),因爲它實際上保留了這些默認值。如果您想更改下一版本應用程序的默認值,則無法確定用戶是選擇使用默認值,還是隻使用默認值,因爲用戶從未更改過默認值。 –

+1

我發現了這個:http://ijure.org/wp/archives/179 我不能相信iOS不會默認加載默認值到NSUserDefaults ......這不是一個錯誤嗎? – user293895