2013-03-03 3 views
0

Аналогичный вопрос на StackOverflow дали комбинацию:Как сохранить состояние UISwitch в файл

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setBool:switchState forKey:@"mySwitchValueKey"];

и

BOOL swichState = [userDefaults boolForKey:@"mySwitchValueKey"];

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


Может ли кто-нибудь сказать мне, где им нужно идти? Почему код не работает?

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    BOOL switchState = [[NSUserDefaults standardUserDefaults] boolForKey:@"mySwitchValueKey"]; 
    if (switchState == YES) { 
     [hard1ON setOn:TRUE]; 
    } else { 
     [hard1ON setOn:FALSE]; 
    } 
} 

- (IBAction)switchValueChanged 
{ 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
    [userDefaults setBool:switchState forKey:@"mySwitchValueKey"]; 

    if (hard1ON.on) { 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"theChange" object:nil]; 
    } else { 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"theChange2" object:nil]; 
    } 
} 
+0

Что вы получите, если вы поместите nslog (@ "% d", switchState) в viewDidLoad. –

+0

ничего не происходит в консоли –

+0

, поэтому ваш viewDidLoad никогда не называется? –

ответ

0
  • Первые две строки предназначены для сохранения ваших данных, поэтому при любом событии отправки/сохранения вы можете использовать эти строки для сохранения ваших данных. Или вы можете сохранять каждый раз при изменении значения переключателя.
  • Вторая строка предназначена для извлечения сохраненных данных, поэтому вы можете использовать это, когда ваше приложение будет повторно очищено. Чтобы вы могли узнать, какие данные были сохранены при последнем запуске. И в соответствии с этим вы можете продолжить свой код.

Для получения дополнительной информации проверьте это link, это может дать вам краткое описание NSUserDefaults.

Надеюсь, это поможет.

+0

спасибо за ваш ответ, не могли бы вы рассказать мне, почему редактирование на мой вопрос не работает? –

+0

- (IBAction) switchValueChanged { NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setBool: <Выход UISwitch> .isOn forKey: @ "mySwitchValueKey"]; Пробуйте эту строку кода – Mrunal

+0

У вас есть необходимый результат? – Mrunal

1

Эти два оператора используются для создания экземпляра NSUserDefaults, а затем установив switchState в standardUserDefaults, то есть с вашим приложением.

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
[userDefaults setBool:switchState forKey:@"mySwitchValueKey"]; 

switchState должны быть объявлены в любом месте над этим утверждением, как BOOL switchState.

Из этого утверждения BOOL swichState = [userDefaults boolForKey:@"mySwitchValueKey"]; boolValue считывается обратно в swichState.

Вышеприведенный код должен быть в методе, который вызывается при изменении или переводе или переходе на другой вид, если switchState является локальным свойством класса.

Если это глобальный или общий, это может быть любое место, наиболее подходящим местом будет applicationSholdTerminate:.

+0

см. Редактирование на мой вопрос, не могли бы вы рассказать мне, почему он не работает? –

+0

@LouisHolley: при настройке вы также должны использовать '[standardUserDefaults synchronize];' –

+0

в viewDidLoad или IBAction? Он говорит, что standardUserDefaults является незанятой переменной –

Смежные вопросы