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

时间:2013-10-29 07:18:43

标签: ios objective-c nsuserdefaults uiswitch

我要尝试的功能是将我的切换状态默认为setOn:YES但是一旦用户切换UISwitch,就会在NSUserDefaults中保存该切换的状态。

在我看来,我最好怎么做?我目前在viewDidLoad

中有以下代码
if([[NSUserDefaults standardUserDefaults] boolForKey:@"lights"] == 0){
        [lightsSwitch setOn:NO];
}

和我的toggleLightSwitch:(id)sender

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

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

4 个答案:

答案 0 :(得分:7)

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 ;

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

首先您应该在NSUserDefaults中为@“lights”键将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];

并在你的toggles方法中检查值并在NSUserDefaults中设置适当的值

 -(void)toggleLightSwitch:(id)sender {

    if (!sender.on) {

        [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"lights"]; 
    }
    else
    {
        [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"lights"];

    }
}