2

我已经将用户默认设置为记录 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。:(

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

请帮助:P

哈利

4

3 回答 3

4

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

NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
[defaults setObject:[NSNumber numberWithInt:25] forKey:@"senset"];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
于 2011-03-08T04:07:55.620 回答
1

只需询问 objectForKey:。如果未设置,它将返回 nil。

您的测试不起作用,因为 integerForKey: 未设置值将返回 0,即 nil,即 NULL。它们之间的差异只存在于编译器中。

于 2010-04-10T18:52:45.850 回答
1

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

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

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

于 2010-04-10T18:54:35.370 回答