我要尝试的功能是将我的切换状态默认为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
,有没有办法解决这个问题?
答案 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"];
}
}