设置NSUserDefaults以便首次启动

时间:2014-04-12 18:56:09

标签: ios objective-c nsuserdefaults

我必须关注NSUserDefaults,我希望在用户首次启动应用时将其设置为yes?我该怎么做呢?我知道需要将其放入AppDelegate,但我无法解决如何做到这一点。

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];

[self.truthonoff setOn:[[defaults objectForKey:@"truthonoff"] boolValue] animated:YES];

[self.truthonoff addTarget:self action:@selector(stateSwitched:) forControlEvents:UIControlEventValueChanged];

[self.dareonoff setOn:[[defaults objectForKey:@"dareonoff"] boolValue] animated:YES];

[self.dareonoff addTarget:self action:@selector(stateSwitcheddare:) forControlEvents:UIControlEventValueChanged];
//other options

[self.shakesonoff setOn:[[defaults objectForKey:@"shakesonoff"] boolValue] animated:YES];

[self.shakesonoff addTarget:self action:@selector(stateSwitchedshakes:) forControlEvents:UIControlEventValueChanged];

[self.soundonoff setOn:[[defaults objectForKey:@"soundonoff"] boolValue] animated:YES];

[self.soundonoff addTarget:self action:@selector(stateSwitchedsound:) forControlEvents:UIControlEventValueChanged];

3 个答案:

答案 0 :(得分:3)

你在寻找的是什么 -[NSUserDefaults registerDefaults:]

例如,您可以执行以下操作:

+ (void)initialize
{
    if ([self class] == [AppDelegate class])
    {
        [[NSUserDefaults standardUserDefaults] registerDefaults:@{@"dareonoff":@NO}];
    }
}

使用registerDefaults的好处是,使用-[NSUserDefault objectForKey:]删除首选项会将密钥恢复为在registeredDefaults中声明的默认值。

答案 1 :(得分:0)

当应用程序第一次启动时,

objectForKey:会返回nil - 如果以前没有设置任何密钥值,则会更加有效。

从用户默认值中检索值时,应始终检查nil。当它为零时,你继续使用resonalbe默认值。

这里发生的是objectForKey返回nil。然后,您将boolValue发送给nil,如果null value,则返回FALSE NObool

答案 2 :(得分:0)

您可以在Settings.bundle中将初始值添加到Root.plist。然后您可以按照此问题中的描述注册这些默认值:

iPhone - reading Setting.bundle returns wrong values