IPhone SDK默认值NSUserDefaults

IPhone SDK默认值NSUserDefaults,iphone,integer,nsuserdefaults,Iphone,Integer,Nsuserdefaults,我已经将用户默认设置为为为UISlider记录一个整数,问题是,如果用户刚刚安装了应用程序,则整数为零或NULL。有没有办法检测它是否为NULL和整数 以下是我迄今为止的代码: -(void)awakeFromNib { NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; senset = [prefs integerForKey:@"senset"]; senset = sensitivity.value; } - (I

我已经将用户默认设置为为为UISlider记录一个整数,问题是,如果用户刚刚安装了应用程序,则整数为零或NULL。有没有办法检测它是否为NULL和整数

以下是我迄今为止的代码:

-(void)awakeFromNib {
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
senset = [prefs integerForKey:@"senset"];
senset = sensitivity.value;
}
- (IBAction) setSens {
senset = sensitivity.value;
}
- (IBAction) goBackopt {
{
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
    [prefs setInteger:senset  forKey:@"senset"];
    [prefs synchronize];
}

 }
senset是整数。我尝试过这段代码,第一次它将其设置为25,但是如果我尝试覆盖它,它将不起作用,并一直将其设置为25:(

请帮忙:p


Harry

只需请求objectForKey:。如果未设置,它将返回零


您的测试不起作用,因为IntegerWorkey:具有未设置的值将返回0,即零,即NULL。它们之间的差异仅对编译器存在。

如果在正常使用情况下零不是有效值(即,您保存的首选项永远不会将此整数设置为零),则您可以进行检查

if( [prefs integerForKey:@"senset"] == 0){
    [prefs setInteger:25 forKey:@"senset"];
}

编辑:呃,我想我有一个问题:当你试图覆盖它时,你是否为你的键(@“senset”)设置了一个整数值(25)?如果不是,则它将保持为零或零,并且每次检查时,它都会尝试将本地senset变量再次更改为25。

您应该为每个首选项设置一个有效的默认值。当用户未设置此值时,将使用此值

NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
[defaults setObject:[NSNumber numberWithInt:25] forKey:@"senset"];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
[defaults setObject:[NSNumber numberWithInt:25] forKey:@"senset"];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];