在NSUserDefaults中存储ON / OFF开关?

时间:2012-09-03 17:12:52

标签: ios cocoa-touch nsuserdefaults uiswitch

我有一个应用程序,我使用NSUserDefaults来确定它是否是第一次有人打开应用程序。如果是第一次,应用程序将显示教程页面。

现在,我想改变它,以便如果用户将ON / OFF开关移动到“ON”,他们在启动应用程序时将看不到教程。如何在NSUserDefaults中存储用户选择的ON / OFF开关?

5 个答案:

答案 0 :(得分:7)

我使用以下代码做了类似的事情:

存储它:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setBool:YES forKey:@"the_key"];
[[NSUserDefaults standardUserDefaults] synchronize]; //Thanks Henri Normak

检索它:

[[NSUserDefaults standardUserDefaults] objectForKey:@"the_key"]

答案 1 :(得分:3)

将其包裹在NSNumber numberWithBool中:。

[defaults setValue:[NSNumber numberWithBool:mySwitch.on] forKey:@"mySwitchValue"];

// and get it out
BOOL savedSwitch = [[defaults valueForKey:@"mySwitchValue"] boolValue];

答案 2 :(得分:1)

您需要在NSUserDefaults中保存两个bool密钥才能获得所需内容。例如 firstTime 用于检查首次启动应用, showTutorial 用于检查/保存切换更改

您可以使用以下方法设置布尔值:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"firstTime"];

并使用此代码阅读:

if([[NSUserDefaults standardUserDefaults] boolForKey:@"showTutorial"] || [[NSUserDefaults standardUserDefaults] boolForKey:@"firstTime"]) {
    [self displayTutorial];
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"firstTime"];
} 
else {
    [self displayMainScreen];
}

将View上的UISwitch从InterfaceBuilder链接到valuechanged上的此操作

-(IBAction)userSetOnOff:(id)sender
 {
      UISwitch *switchValue = sender;
      if (switchValue.on){
           [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"showTutorial"];
      }
      else{
           [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"showTutorial"];
      }

 }

答案 3 :(得分:1)

在我的一个应用程序中,我检查是否已使用NSUserDefaults,如果没有设置一个标准的User Default变量。

- (id)init

{

standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSString *testInitState = [standardUserDefaults stringForKey:kInstallInit];
if (testInitState == nil)
{

    #if(kStateModelDebug)
    NSLog(@" State Model: First time initialized");
    #endif
    [self.standardUserDefaults setObject:@"true"  forKey:kInstallInit];
    [self.standardUserDefaults synchronize];

    // Start the tutorials, init DB, etc


}
else 
{
    #if(kStateModelDebug)
    NSLog(@" State Model has ALREADY been initialized");
    #endif

    // Read other state variables and/or init the startup processes

}
return self;    

}

到目前为止,直到ios 5.0和新的6.0,这都是一个解决方案。寻找有关此解决方案的评论。

答案 4 :(得分:-1)

一种方法是简单地保持具有开关状态的字符串。如果用户更喜欢on位置,则存储字符串@"on"。否则存储字符串@"off"

- (void) toggleUserPreference:(BOOL) preferOn {
    NSString *newPreference = preferOn ? @"on" : @"off";
    [[NSUserDefaults standardUserDefaults] setValue:newPreference
                                             forKey:ONOFF_PREFERENCE_KEY];
    [[NSUserDefaults standardUserDefaults] synchronize];
}