我试图UISwitch
在我的应用程序的设置视图中保持状态。基本上它是一个UITableView
并包含一些开关来获取用户偏好。下面的代码解释了开关是如何构造的(下面只给出了一个开关构造,其他的也是同样的构造)。
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 存储 Switch 的状态。所以在我的选择器方法实现中,我定义了这样的 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 文件夹时,我看到创建的 plist 中包含 BOOL 值。然后我尝试在 cellForRowAtIndexPath 方法中设置 UISwitch 状态,如下所示:
syncSwitch.on = syncStartupSwitch;
我在 ApplicationWillTerminate 和选择器本身中也有这行代码
[[NSUserDefaults standardUserDefaults]synchronize];
尽管如此,在模拟器或设备上重新启动应用程序后,开关状态并未恢复......
我在上面的代码中有什么错误?
干杯,
我明白