2010-11-03 84 views
1

我聽說我需要使用registerDefaults:加載NSUserDefaults,如果用戶從未更改過應用程序設置。如何使用registerDefaults:正確地加載我的默認設置?

在我的AppDelegate我使用下面的代碼:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    // Override point for customization after application launch. 

    // Load default defaults 
    [[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    // Add the view controller's view to the window and display. 
    [window addSubview:viewController.view]; 
    [window makeKeyAndVisible]; 

    return YES; 
} 

我抄我的設置Root.plist捆綁到我的項目的ressources文件夾,並在其更名爲Defaults.plist

現在我的視圖控制器的viewDidLoad方法我使用下面的代碼來加載設置:

NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];

if ((([[defaults objectForKey:kToggleSwitch] isEqualToString:@"Enabled"]) ? YES : NO)) { 

//Do Stuff 
//BTW i'm using strings for the True/False the values of the ON/OFF positions of the UISwitch 

} 

即使這樣做,我的設置包的Root.plist中存儲的默認設置也不會被加載。他們加載的唯一方法是,如果用戶真正進入iPhone設置,並只是查看我的應用程序的設置頁面。

很明顯,我在這裏做錯了什麼人可以幫我一把。順便說一下我使用的iOS 4.1

+0

什麼是你Defaults.plist文件? – jasongregori 2012-02-23 02:59:22

+0

它應該是一個kToggleSwitch設置爲默認值的字典。 – jasongregori 2012-02-23 03:00:36

回答

2

當我做了我的應用程序運行它,我從來不知道要登記任何違約的,所以我做了一個窮人版的默認設置:

我有一個布爾變量:haveConfig,這當設置被加載時被檢查:

haveConfig = [prefs boolForKey:@"haveConfig"]; 
if (!haveConfig) 
{ 
    return; 
} 

/* Load settings here */ 
.... 

第一次「haveConfig」將是假的,所以我不加載它們。當用戶第一次更改的設置之一,它們與「haveConfig」變量存儲在一起:

haveConfig = true; 
[prefs setBool:haveConfig forKey:@"haveConfig"]; 
... 

我知道這不是完美的,但它工作:-)

+0

這似乎是一個聰明的想法。但是,我怎麼能知道這些設置是否已加載,以便將bool更改爲true? – cgossain 2010-11-03 17:19:30

+0

當他們第一次改變設置時,我用true值保存bool。下一次(!haveConfig)條件成立時,設置將被加載:-) – Istvan 2010-11-03 19:07:46

相關問題