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键,有没有办法解决这个问题?
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)