我正在尝试在我的应用程序的设置视图中保留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存储交换机的状态。所以在我的选择器方法实现中,我定义了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];
但是,在模拟器或设备上重新启动应用程序后,交换机状态仍未恢复...
上述代码中的错误是什么?
干杯,
iSee的
答案 0 :(得分: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"];
只需测试上面的代码;
答案 1 :(得分:1)
而不是使用setObject:forKey:尝试使用setBool:forKey:。
[[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"SyncAtStartup"];