Iphone 使用NSUserDefaults存储UISwitch状态
我正在尝试在应用程序的设置视图中保持UISwitch状态。基本上,它是一个UITableView,包含几个开关以获取用户首选项。下面的代码解释了交换机是如何构造的。下面只给出了一个交换机构造,其他交换机也是以同样的方式构造的Iphone 使用NSUserDefaults存储UISwitch状态,iphone,objective-c,selector,nsuserdefaults,uiswitch,Iphone,Objective C,Selector,Nsuserdefaults,Uiswitch,我正在尝试在应用程序的设置视图中保持UISwitch状态。基本上,它是一个UITableView,包含几个开关以获取用户首选项。下面的代码解释了交换机是如何构造的。下面只给出了一个交换机构造,其他交换机也是以同样的方式构造的 if (cell == nil) { cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SomeIdentifierB] autorelease];
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"];
}
}
syncSwitch.on = syncStartupSwitch;
最后,在我的viewDidLoad中,我编写了以下代码行:
syncStartupSwitch = [[NSUserDefaults standardUserDefaults]boolForKey:@"SyncAtStartup"];
我确信我的实现缺少一些逻辑。有人能指出缺陷并纠正我吗
更新:
我采纳了@jfalexvijay的建议,并使用了以下代码:
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"SyncAtStartup"];
BOOL syncStartupSwitch = [[NSUserDefaults standardUserDefaults] boolForKey:@"SyncAtStartup"];
当我查看Preferences文件夹时,我看到创建的plist中包含BOOL值。然后,我尝试在cellForRowAtIndexPath方法中设置UISwitch状态,如下所示:
-(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"];
}
}
syncSwitch.on = syncStartupSwitch;
我在ApplicationWillTerminate和选择器本身中也有这行代码
[[NSUserDefaults standardUserDefaults]synchronize];
不过,在模拟器或设备上重新启动应用程序后,开关状态不会恢复
以上代码中我的错误是什么
干杯
iSee而不是使用setObject:forKey:尝试使用setBool:forKey: [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"SyncAtStartup"];
不要使用setObject:forKey:尝试使用setBool:forKey: [[NSUserDefaults standardUserDefaults] setBool:TRUE forKey:@"SyncAtStartup"];
您可以使用以下代码
[[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"];
只需测试上述代码 您可以使用以下代码
[[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"];
只需测试上述代码 除了你想要的是,不是真。是和@YES绝对不是一回事。是/否和真/假之间没有太大的实际区别。在应用程序重新启动后,它仍然没有恢复状态:而不是使用if-else,你可以直接使用syncSwitch.on作为setBool的参数值。您是否已检查syncSwitch.on的值是否正确更改?除非您希望是,不正确。YES和@YES绝对不是同一回事。YES/NO和TRUE/FALSE之间没有太大实际区别。在应用程序重新启动后,它仍然没有恢复状态:您可以直接使用syncSwitch.on作为setBool的参数值,而不是使用if-else。是否已检查syncSwitch.on的值是否正确更改?如果使用setObject,则不应使用boolForKey获取该值;你应该使用valueForKey;如果使用setObject,则不应使用boolForKey获取值;你应该使用valueForKey;嗨,谢谢你的建议。上面的代码运行良好。我可以看到plist文件被BOOL更新,但我仍然无法检索BOOL并相应地设置UISwitch…我已经使用以下示例进行了测试;如果[[NSUserDefaults standardUserDefaults]boolForKey:@SyncAtStartup]syncSwitch.on=[[NSUserDefaults standardUserDefaults]boolForKey:@SyncAtStartup];否则//显示警报。它工作得很好我的错我在给UISwitch赋值时出错了。。。谢谢,我认为这是解决我问题的最佳答案。嗨,谢谢你的建议。上面的代码运行良好。我可以看到plist文件被BOOL更新,但我仍然无法检索BOOL并相应地设置UISwitch…我已经使用以下示例进行了测试;如果[[NSUserDefaults standardUserDefaults]boolForKey:@SyncAtStartup]syncSwitch.on=[[NSUserDefaults standardUserDefaults]boolForKey:@SyncAtStartup];否则//显示警报。它工作得很好我的错我在给UISwitch赋值时出错了。。。谢谢,我认为这是解决我问题的最佳答案。