默认的UISwitch为YES,然后用NSUserDefaults保存状态
我试图去的function是默认我的开关到setOn:YES
的状态,但是一旦用户切换UISwitch
在NSUserDefaults
保存该开关的状态。
在我看来,我最好怎样去做这件事? 我目前有我的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"]; } }