在嘗試訪問存儲在NSUserDefaults中的值之前,您應該註冊默認值。 你可以在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
。
註冊您的默認值很快,所以不需要優化。只需在應用程序啓動時執行此操作即可。
我存儲我的userdefaults在plist中並註冊該列表的內容,就像這樣:
NSDictionary *dictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"DefaultUserDefaults" ofType:@"plist"]];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
如果您註冊默認這樣你就不必擔心您覆蓋用戶提供的值。 NSUserdefaults使用「域」來存儲它的值。如果您註冊了默認值,它們將存儲在註冊域中。如果用戶存儲值,則這些值將存儲在應用程序域中。
如果您嘗試從NSUserdefaults中獲取值,它會查看該值是否存在於應用程序域中,如果不存在,則會從註冊域獲取該值。
編輯:
(如果沒有用戶提供的值或者更好的,存儲在您的NSUserDefaults的價值觀,以及那些作爲後備),您會訪問那些值一樣這個:
NSInteger minutesToWait = [[NSUserDefaults standardUserDefaults] integerForKey:@"MinutesToWait";
NSString *urlString = [[NSUserDefaults standardUserDefaults] stringForKey:@"DefaultURLStr"];
plist只是NSDictionary的鍵和值的另一種表示。關鍵是您用於訪問userdefaults的鍵,並且該值是您的默認值。 非常直截了當。
你如何創建詞典並不重要。你也可以在代碼中做到這一點。
所以會說的plist是什麼樣子?只是一組與關聯名稱關聯的鍵/值對?如果代碼位於` - (void)applicationDidFinishLaunching:(UIApplication *)application`中,還是必須位於` - (BOOL)應用程序中:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions` for一些原因? – 2011-01-31 19:34:16