0

我试图实现的功能是将我的开关状态默认为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. 由于NSUserDefault默认NO为 bool 键,有没有办法解决这个问题?

4

4 回答 4

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 ] ;
}

在您的-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 ;
于 2013-10-29T07:23:45.197 回答
0

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

于 2013-10-29T07:22:48.667 回答
0

您将Yes设置为lightsindidFinishLaunchingWithOptions方法,以检查该应用程序是否第一次运行。

  if ([[NSUserDefaults standardUserDefaults]objectForKey:@"lights"]==nil)
    {
        [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"lights"];
    }
于 2013-10-29T07:23:07.700 回答
0

首先,您应该在 @"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"];

    }
}
于 2013-10-29T07:39:58.550 回答