1

NSUserDefaults のコードは非常に単純に見えますが、機能させることができません。

ユーザーがサウンドを無効にするかどうかを設定できるsettingViewsがあります。これが私のコードです:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.soundSettings.font = [UIFont rw_snapFontWithSize:24.0f];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if([defaults objectForKey:@"stateForSoundSwitch"]) {
        NSLog(@"Sound is ON");
        self.soundStatus.on=YES;
    } else {
        self.soundStatus.on=NO;
        NSLog(@"Sound is OFF");
    }
}

- (IBAction)soundSwitchChanged:(id)sender
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if (self.soundStatus.on) {
        NSLog(@"Sound is enabled");
        [defaults setBool:true forKey:@"stateForSoundSwitch"];
    }
    else {
        NSLog(@"Sound is disabled");
        [defaults setBool:false forKey:@"stateForSoundSwitch"];
    }
    [defaults synchronize];

}

しかし、スイッチをFALSEに変更しても、設定画面にログインするたびに値はTRUEになります。私は何が欠けていますか?

4

1 に答える 1

1

setBool:forKey: BOOL が必要です。true または false (ブール型、小文字) の代わりに YES または NO を使用してみてください。

また、objectForKey の代わりに boolForKey でアクセスする必要があります。

キーが実際に YES/NO に設定されているかどうかではなく、キーが存在する (つまり、nil でない) かどうかを効果的にテストしているため、NSUserDefaults でオブジェクトを設定したことがある場合、ロジック テストは常に YES になります。

つまり、次のように変更します。

if ([defaults objectForKey:@"stateForSoundSwitch"]) {

これに:

if ([defaults boolForKey:@"stateForSoundSwitch"] == YES) {
于 2013-07-18T22:18:01.543 に答える