IPhone SDK по умолчанию NSUserDefaults - PullRequest
2 голосов
/ 10 апреля 2010

Я установил пользовательские настройки по умолчанию для записи целого числа для 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];
}

 }

смысл - это целое число. я пробовал этот код, и он устанавливает его на 25 в первый раз, но потом, если я пытаюсь перезаписать его, он не будет работать и продолжает устанавливать его на 25.: (

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

Пожалуйста, помогите: P

Гарри

Ответы [ 3 ]

4 голосов
/ 08 марта 2011

Вы должны установить действительное значение по умолчанию для каждого из ваших предпочтений. Это значение будет использоваться, если оно не было установлено пользователем.

NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
[defaults setObject:[NSNumber numberWithInt:25] forKey:@"senset"];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
1 голос
/ 10 апреля 2010

Если ноль не является допустимым значением в обычном случае использования (т. Е. Ваше сохраненное предпочтение никогда не установит это целое число в ноль), тогда вы можете проверить

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

Edit: err, я полагаю, у меня есть вопрос: когда вы пытаетесь перезаписать его, вы устанавливаете целое значение (25) для своего ключа (@ "senset")? Если нет, то он останется равным нулю или нулю, и каждый раз, когда вы будете проверять, он будет пытаться снова изменить локальную переменную смысла на 25.

1 голос
/ 10 апреля 2010

Просто попросите objectForKey :. Если он не установлен, он вернет ноль.

Ваш тест не работает, потому что integerForKey: с неустановленным значением вернет 0, что равно nil, что равно NULL. Различия между ними существуют только для компилятора.

...