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)を設定していますか?そうでない場合は、ゼロまたは nil のままになり、チェックするたびに、ローカルのセンス変数を再度 25 に変更しようとします。

于 2010-04-10T18:54:35.370 に答える