Сохранить переключатель ON/OFF в NSUserDefaults?

У меня есть приложение, в котором я использую NSUserDefaults, чтобы определить, впервые ли кто-то открывает приложение. Если это первый раз, приложение отображает обучающую страницу.

Теперь я хотел бы изменить это так, чтобы, если пользователь переместит переключатель ВКЛ/ВЫКЛ в положение «ВКЛ», он не увидит учебник при запуске приложения. Как сохранить выбор пользователя для переключателя ВКЛ/ВЫКЛ в NSUserDefaults?


person user1486548    schedule 03.09.2012    source источник
comment
stackoverflow.com/questions/3841166 /   -  person Adam    schedule 03.09.2012
comment
добавьте код, в котором вы устанавливаете значение для NSUserDefaults   -  person Vimal Venugopalan    schedule 03.09.2012


Ответы (5)


Я сделал что-то подобное со следующим кодом:

Храните это:

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

Получить его:

[[NSUserDefaults standardUserDefaults] objectForKey:@"the_key"]
person ratbum    schedule 03.09.2012
comment
Только не забудьте вызвать [[NSUserDefaults standardUserDefaults] synchronize]; - person Henri Normak; 03.09.2012
comment
^ Хороший улов. Я совсем забыл об этом. - person ratbum; 03.09.2012

Оберните его в NSNumber numberWithBool:.

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

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

Вам нужно сохранить два логических ключа в NSUserDefaults, чтобы получить то, что вы хотите. например 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];
}

Свяжите UISwitch on View из InterfaceBuilder с этим действием при изменении значения

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

 }
person Vimal Venugopalan    schedule 03.09.2012

В одном из моих приложений я проверяю, использовалась ли NSUserDefaults, и если не установлена ​​одна стандартная переменная User Default.

-(id) инициировать

{

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, это было решением. Ищу комментарии к этому решению.

person Matthew Ferguson    schedule 19.02.2013

Один из способов — просто сохранить строку со статусом переключателя. Если пользователь предпочитает позицию on, вы должны сохранить строку @"on". В противном случае сохраните строку @"off".

- (void) toggleUserPreference:(BOOL) preferOn {
    NSString *newPreference = preferOn ? @"on" : @"off";
    [[NSUserDefaults standardUserDefaults] setValue:newPreference
                                             forKey:ONOFF_PREFERENCE_KEY];
    [[NSUserDefaults standardUserDefaults] synchronize];
}
person SundayMonday    schedule 03.09.2012
comment
Или просто используйте - setBool:forKey: для сохранения и - boolForKey: для получения результата. - person Patrick; 03.09.2012
comment
Самый простой способ — использовать boolForKey: - person Adam; 03.09.2012