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];
それでも、シミュレーターまたはデバイスでアプリケーションを再起動した後、スイッチの状態は復元されません...
上記のコードの私の間違いは何ですか?
乾杯、
そうですか