我已經創建了一個具有單個首選項值的設置包,這是一個具有默認值的文本字段。設置包 - 默認值行爲?
當我的應用程序啓動時,我檢索它的值爲null。在用戶提供價值之前,我是否必須手動編碼要使用的值?
此外,如果用戶對首選項屏幕進入並輸入文本字段,則保留它而不作任何更改,值將不會被設置...用戶必須實際更改要保存的值,這是正確?
我已經創建了一個具有單個首選項值的設置包,這是一個具有默認值的文本字段。設置包 - 默認值行爲?
當我的應用程序啓動時,我檢索它的值爲null。在用戶提供價值之前,我是否必須手動編碼要使用的值?
此外,如果用戶對首選項屏幕進入並輸入文本字段,則保留它而不作任何更改,值將不會被設置...用戶必須實際更改要保存的值,這是正確?
不,不這樣做。
有一個功能是:
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];
}
如果您的鍵值爲空,您可以檢查您的應用程序,然後您可以使用您自己的默認值。
似乎默認值顯示在設置應用程序中,但不會自動存儲在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;
}
還沒有嘗試過,但這個certinly似乎比硬編碼的默認值比較合適:) – Nippysaurus 2011-06-08 03:18:05
是啊,我在這裏不能保證代碼。不過,我已經寫過並使用過它。我將這個代碼集成到另一個項目中(因此我在這裏搜索),所以如果tehre有任何問題,我會更新它。 – 2011-06-08 06:21:06
工作正常。 :) – 2011-06-09 03:53:39