2010-11-03 83 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

相关问题