2011-04-12 88 views
5

我已經創建了一個具有單個首選項值的設置包,這是一個具有默認值的文本字段。設置包 - 默認值行爲?

當我的應用程序啓動時,我檢索它的值爲null。在用戶提供價值之前,我是否必須手動編碼要使用的值?

此外,如果用戶對首選項屏幕進入並輸入文本字段,則保留它而不作任何更改,值將不會被設置...用戶必須實際更改要保存的值,這是正確?

回答

4

不,不這樣做。

有一個功能是:

id userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults registerDefaults: defaultSettings]; 

您可以通過迭代的PreferenceSpecifiers的所有子鍵在設置plist文件構建參數。

事情是這樣的:

- (NSDictionary *)readDefaultSettingsFromPlist: (NSString *)inPath; 
{ 
    id mutable = [NSMutableDictionary dictionary]; 
    id settings = [NSDictionary dictionaryWithContentsOfFile: inPath]; 
    id specifiers = [settings objectForKey: @"PreferenceSpecifiers"]; 
    for (id prefItem in specifiers) { 
     id key = [prefItem objectForKey: @"Key"]; 
     id value = [prefItem objectForKey: @"DefaultValue"]; 
     if (key && value) { 
      [mutable setObject: value 
         forKey: key]; 
     } 
    } 
    return [NSDictionary dictionaryWithDictionary: mutable]; 
} 
+0

還沒有嘗試過,但這個certinly似乎比硬編碼的默認值比較合適:) – Nippysaurus 2011-06-08 03:18:05

+0

是啊,我在這裏不能保證代碼。不過,我已經寫過並使用過它。我將這個代碼集成到另一個項目中(因此我在這裏搜索),所以如果tehre有任何問題,我會更新它。 – 2011-06-08 06:21:06

+0

工作正常。 :) – 2011-06-09 03:53:39

1

如果您的鍵值爲空,您可以檢查您的應用程序,然後您可以使用您自己的默認值。

1

似乎默認值顯示在設置應用程序中,但不會自動存儲在NSUserDefaults standardUserDefaults中。所以如果你發現一個零值,你應該明確地設置默認值。

事情是這樣的:

+ (NSString *)userDefaultStringForKey:(NSString *)key defaultValue:(NSString *)def { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    NSString *val = [defaults stringForKey:key]; 
    if (val == nil && def != nil) { 
     val = def; 
     [defaults setObject:val forKey:key]; 
    } 
    return val; 
}