2013-03-09 81 views
0

我知道在哪裏存儲userDefaults有幾個問題,以便所有人都可以使用。目前我有我的AppDelegate,它的工作。但是,我現在想要更新每個用戶首​​選項的默認設置。我應該在哪裏存儲NSUserDefaults,以便我可以更新它們?

但是,當用戶退出應用程序並再次啓動它時,它只是再次從頭開始創建默認值。

#import "AppDelegate.h" 

@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 

    NSUserDefaults *sharedPref = [NSUserDefaults standardUserDefaults]; 
    [sharedPref setObject:@"Washington, DC" forKey:@"defaultLocation"]; 
    // 

    return YES; 
} 

顯然,這被每個應用打開時間設置,使用戶選擇過時。

如何設置默認值,然後讓用戶更改默認值,然後在應用程序啓動時被覆蓋?

感謝

+1

這是registerDefaults是。當你註冊一個默認值時,只有當該密鑰的默認值不存在時纔會寫入。 – rdelmar 2013-03-09 04:50:07

+1

@rdelmar'registerDefaults'不寫任何東西。當你嘗試從'NSUserDefaults'獲取一個值時,如果明確設置了該鍵的值,則返回該值。如果密鑰沒有值,則檢查註冊的默認密鑰。 – rmaddy 2013-03-09 05:19:05

+0

@rmaddy,感謝您的糾正。我一直在誤解registerDefaults的工作原理。我應該更仔細地閱讀文檔。 – rdelmar 2013-03-09 23:48:36

回答

1

下面的代碼運行的應用程序是否已經展開了檢查。它旨在取代-registerDefaults:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    if(![[NSUserDefaults standardUserDefaults] boolForKey:@"setupApp"]) 
     { 
      NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
      [defaults setBool:YES forKey:@"setupApp"]; 
      [defaults setObject:@"Washington, DC" forKey:@"defaultLocation"]; 

      [defaults synchronize]; 
     } 
    return YES; 
} 
+0

幾分鐘後,我寫了這個我找到了一個可行的答案,類似於你的。我現在執行一次檢查,看看它是否是第一次啓動應用程序,並且這是唯一一次允許用戶更新它們的時間。謝謝 – 2013-03-09 04:33:20

+0

向下投票..謝謝,爲什麼? – 2013-03-09 04:57:49

+2

這種方法並不像使用'registerDefaults:'那麼容易和乾淨。這段代碼增加了一次額外的檢查,只有一次有用,它在'NSUserDefaults'中增加了一個不必要的額外值。 – rmaddy 2013-03-09 05:21:17

0

NSUserDefaults是可用於整個應用程序的單例。您可以隨時調用它:

[NSUserDefaults standardUserDefaults] 

用戶不能直接與它進行交互,你必須收集數據,然後保存它。要設置值:

[[NSUserDefaults standardUserDefaults] setObject:@"Some Value" forKey:@"MyKey"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; // to save 

用戶默認值將在應用程序啓動之間持續存在。

您必須小心設置對象,只有屬性列表類型可以設置爲用戶默認值。

Ref

+2

設置值後,不需要調用「synchronize」。操作系統將暫時保留更新的值。唯一應該調用'synchronize'的地方在'applicationDidEnterBackground'應用程序委託方法中。 – rmaddy 2013-03-09 05:22:48

4

您應該使用registerDefaults:對於

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
// ... 
    [NSUserDefaults standardUserDefaults] registerDefaults:@{@"defaultLocation" : @"Washington, DC"}]; 
// ... 
    return YES; 
} 
相關問題