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

loc*_*boy 0 objective-c nsuserdefaults uiswitch ios

我试图获得的功能是默认我的切换状态,setOn:YES但一旦用户切换UISwitch保存该切换的状态NSUserDefaults.

在我看来,我最好怎么做?我目前在我的代码中有以下代码viewDidLoad:

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

在我的toggleLightSwitch:(id)sender:

[[NSUserDefaults standardUserDefaults] setBool:lightsSwitch.isOn
                                            forKey:@"lights"];
Run Code Online (Sandbox Code Playgroud)

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

nie*_*bot 7

NSUserDefaults开始为空,所以要求键返回nil,并且调用-boolValuenil返回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 ] ;
}
Run Code Online (Sandbox Code Playgroud)

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

lightsSwitch.on = [ [ NSUserDefaults standardUserDefaults ] boolForKey:@"lights" ] ;
Run Code Online (Sandbox Code Playgroud)

在你的toggleLightSwitch中,我会这样:

BOOL isOn = [ [ NSUserDefaults standardUserDefaults ] boolForKey:@"lights" ] ;
isOn = !isOn ; // toggle ;
[ NSUserDefaults standardUserDefaults ] setBool:isOn ForKey:@"lights" ] ;
self.lightsSwitch.on = isOn ;
Run Code Online (Sandbox Code Playgroud)