默认的UISwitch为YES,然后用NSUserDefaults保存状态

我试图去的function是默认我的开关到setOn:YES的状态,但是一旦用户切换UISwitchNSUserDefaults保存该开关的状态。

在我看来,我最好怎样去做这件事? 我目前有我的viewDidLoad下面的代码:

 if([[NSUserDefaults standardUserDefaults] boolForKey:@"lights"] == 0){ [lightsSwitch setOn:NO]; } 

并在我的toggleLightSwitch:(id)sender

 [[NSUserDefaults standardUserDefaults] setBool:lightsSwitch.isOn forKey:@"lights"]; 

但function将默认为setOn:NO 。 由于NSUserDefault对于bool键默认为NO ,有没有办法解决这个问题?

NSUserDefaults开始为空,所以要求一个键返回nil ,并在nil上调用-boolValue返回NO / 0

您应该使用-[NSUserDefaults registerDefaults:]在您的应用程序委托中为-appDidFinishLaunching中的键/值设置默认值:

 -(void)applicationDidFinishLaunching:(UIApplication*)app { NSDictionary * defaults = @{ "lights" : @YES // you can list the default values for other defaults/switches here } ; [ [ NSUserDefaults standardUserDefaults ] registerDefaults:defaults ] ; } 

在你的-viewDidLoad ,做到这一点:

 lightsSwitch.on = [ [ NSUserDefaults standardUserDefaults ] boolForKey:@"lights" ] ; 

在你的toggleLightSwitch中,我会这样做:

 BOOL isOn = [ [ NSUserDefaults standardUserDefaults ] boolForKey:@"lights" ] ; isOn = !isOn ; // toggle ; [ NSUserDefaults standardUserDefaults ] setBool:isOn ForKey:@"lights" ] ; self.lightsSwitch.on = isOn ; 

如果默认状态为“YES”,那么当应用程序第一次运行时,可以将NSUserDefualt值设置为YES,或者可以使用枚举值,并使用额外的值表示该值尚未设置。

您在Yes中设置为在didFinishLaunchingWithOptions方法中lights ,以检查该应用程序是否正在第一次运行。

  if ([[NSUserDefaults standardUserDefaults]objectForKey:@"lights"]==nil) { [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"lights"]; } 

首先你应该在你的NSUserDefaults中设置boolValue为YES,然后使用if检查值是YES,然后根据NSUserDefaults中的boolValue设置UISwitch的值为YES或No。

didFinishLaunchingWithOptions:写入

 NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:YES, @"lights", nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:defaults]; 

在你的-viewDidLoad方法中写入

 UISwitch *mySwitch = [[UISwitch alloc] initWithFrame:CGRectZero]; mySwitch.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"lights"];; [mySwitch addTarget:self action:@selector(toggleLightSwitch:)forControlEvents:UIControlEventValueChanged]; 

并在您的切换方法检查值并在NSUserDefaults中设置适当的值

  -(void)toggleLightSwitch:(id)sender { if (!sender.on) { [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"lights"]; } else { [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"lights"]; } }