私のアプリケーションの設定ビューにUISwitch
状態を維持しようとしています。基本的にはUITableView
であり、ユーザーの好みを得るためのいくつかのスイッチが含まれています。以下のコードは、スイッチがどのように構成されているかを説明しています(1つのスイッチ構成のみが以下に示されており、他のものも同じように構築されています)。NSUserDefaultsを使用してUISwitch状態を保存する
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"];
私は私にいくつか欠落しているロジックがあると確信しています実装。誰かが欠陥を指摘して私を修正できますか?
UPDATE: 私は@jfalexvijayからの提案を取り、以下のコードを使用:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SyncAtStartup"];
BOOL syncStartupSwitch = [[NSUserDefaults standardUserDefaults] boolForKey:@"SyncAtStartup"];
を私はPreferencesフォルダの中に見たとき、私はそれでBOOL値で作成したばかりのplistを参照してください。私は上のアプリケーションを再起動した後、まだApplicationWillTerminateにし、セレクタ自体に
[[NSUserDefaults standardUserDefaults]synchronize];
をこのコード行をも持っている
syncSwitch.on = syncStartupSwitch;
:私は、このようcellForRowAtIndexPathメソッドにUISwitchの状態を設定しようシミュレータまたはデバイスでは、スイッチの状態は復元されません。
上記のコードで私の間違いはありますか?
乾杯、
ISEE
"setObject"を使用する場合は、値を取得するために "boolForKey"を使用しないでください。あなたはvalueForKeyを使うべきです。 – jfalexvijay