1

UISwitchアプリケーションの設定ビューで状態を保持しようとしています。基本的にはでUITableViewあり、ユーザー設定を取得するためのいくつかのスイッチが含まれています。以下のコードは、スイッチがどのように構築されるかを説明しています(以下に示すのは1つのスイッチ構造のみで、他のスイッチも同じ方法で構築されます)。

if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SomeIdentifierB] autorelease];
            if (syncStartupSwitch) {
                syncSwitch.on = YES;
            }else {
                syncSwitch.on = NO;
            }

            [syncSwitch addTarget:self action:@selector(syncAtStartup:) forControlEvents:UIControlEventValueChanged];


            NSLog(@"Why is this not working%@",(syncSwitch.on ? @"YES" : @"NO"));
                [cell.contentView addSubview:syncSwitch];
            cell.accessoryView = syncSwitch;
            cell.selectionStyle = UITableViewCellSelectionStyleNone;
                //cell.reuseIdentifier  = @"Cell1";
        }
        cell.textLabel.text =cellValue;
        return cell;
    }

ここで、NSUserDefaultsを使用してスイッチの状態を保存したいと思います。したがって、セレクターメソッドの実装では、NSUserDefaultsを次のように定義しました。

-(void) syncAtStartup:(id)sender {
    if ([sender isOn]) {
        [[NSUserDefaults standardUserDefaults]
         setObject:@"YES" forKey:@"SyncAtStartup"];
        [[NSUserDefaults standardUserDefaults]synchronize];
        NSLog(@"%@",(syncStartupSwitch ? @"YES" : @"NO"));

    }else {
        [[NSUserDefaults standardUserDefaults]
         setObject:@"NO" forKey:@"SyncAtStartup"];
            //syncStartupSwitch = [[NSUserDefaults standardUserDefaults]boolForKey:@"SyncAtStartup"];

    }
}

最後に、viewDidLoadで、次のコード行を記述しました。

syncStartupSwitch = [[NSUserDefaults standardUserDefaults]boolForKey:@"SyncAtStartup"];

私の実装にはいくつかの欠落しているロジックがあると確信しています。誰かが欠陥を指摘して私を訂正できますか?

更新: @jfalexvijayから提案を受け取り、以下のコードを使用しました:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SyncAtStartup"];
BOOL syncStartupSwitch = [[NSUserDefaults standardUserDefaults] boolForKey:@"SyncAtStartup"];

Preferencesフォルダーを調べると、BOOL値を含むplistが作成されているのがわかります。次に、cellForRowAtIndexPathメソッドでUISwitchの状態を次のように設定しようとします。

syncSwitch.on = syncStartupSwitch;

ApplicationWillTerminateとセレクター自体にもこのコード行があります

[[NSUserDefaults standardUserDefaults]synchronize];

それでも、シミュレーターまたはデバイスでアプリケーションを再起動した後、スイッチの状態は復元されません...

上記のコードの私の間違いは何ですか?

乾杯、

そうですか

4

2 に答える 2

3

次のコードを使用できます。


[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SyncAtStartup"];
BOOL test = [[NSUserDefaults standardUserDefaults] boolForKey:@"SyncAtStartup"];

次のコードを使用すると、YESが返されます。


[[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"SyncAtStartup"];
BOOL test = [[NSUserDefaults standardUserDefaults] boolForKey:@"SyncAtStartup"];

上記のコードをテストするだけです。

于 2010-11-20T07:43:44.073 に答える
1

setObject:forKey:を使用する代わりに、setBool:forKey:を使用してみてください。

[[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@ "SyncAtStartup"];
于 2010-11-20T06:56:42.117 に答える