2015-10-24 2 views
0

В моем коде я сохраняю состояние UISwitch через NSUserDefaults. Но когда окно перезагружается, все UISwitche's включены. Вот мой фрагмент кода:UISwitch не работает должным образом

@IBAction func switchState(sender: AnyObject) { 

    let standardDefaults = NSUserDefaults.standardUserDefaults()  
    if mySwitch.on{ 
     standardDefaults.setObject("On", forKey: "switchKey") 
    } 
    else{ 
     standardDefaults.setObject("Off", forKey: "switchKey") 
    } 
    standardDefaults.synchronize() 

} 

override func awakeFromNib() { 
    super.awakeFromNib() 
    let standardDefaults = NSUserDefaults.standardUserDefaults() 
    self.mySwitch.on = standardDefaults.stringForKey("switchKey") == "On" 
} 

Я считаю, что в разделе awakeFromNib, но я не могу понять это. Пожалуйста помоги.

спасибо.

ответ

0
self.mySwitch.on = standardDefaults.stringForKey("switchKey") == "On" 

должен быть

self.mySwitch.on = (standardDefaults.stringForKey("switchKey") == "On") 
0

Попробуйте это ..

self.mySwitch.on = standardUserDefaults().setBool(true, forKey: "on") 

Я надеюсь, что это поможет.

+0

Это не дает ответа на этот вопрос. Чтобы критиковать или просить разъяснения у автора, оставьте комментарий ниже их сообщения. –

+0

@PetroKorienev Как это не дает ответа? Это представляет собой правдоподобное решение. Если вы считаете, что это неверно, вы должны отказаться от комментариев и оставить комментарий, объясняющий ваши проблемы. – Undo

+0

Подумайте о том, чтобы добавить один-два слова объяснения, почему авторский код неправильный, и вместо этого ваш фрагмент прав. –

1

В вашей реализации есть избыточный код. Вы можете напрямую сохранить bool в NSUserDefaults, а не хранить String, а затем управлять им.

Это, как вы должны это сделать:

при сохранении данных:

@IBAction func switchState(sender: AnyObject) { 
    NSUserDefaults.standardUserDefaults().setBool(mySwitch.on, forKey: "switchKey") 
} 

При получении данных:

override func awakeFromNib() { 
    super.awakeFromNib() 
    self.mySwitch.on = NSUserDefaults.standardUserDefaults().boolForKey("switchKey") 
} 

Кроме того, стоит отметить, что NSUserDefaults пуст, поэтому запрос ключа возвращает nil и callin g boolValue по телефону nilfalse. Если вы хотите, чтобы ваш переключатель начать со значением по умолчанию, вы можете реализовать это в appDidFinishLaunching:

NSUserDefaults.standardUserDefaults().registerDefaults(["switchKey" : true]) 
+0

Нет необходимости звонить 'synchronize' – Paulw11

+0

Фактически @ Paulw11. Старые привычки ... Ах! Удалены. Спасибо за указание :)! – Abhinav

+0

Привет, ребята. В режиме реального времени это сохранит состояние переключателя, но когда таблица перезагрузит отдельные состояния коммутаторов, они не будут сохранены. Все они включены или выключены в зависимости от состояния одного или всех вариантов: я иду в стол и включаю один из четырех переключателей. Затем я перехожу к следующему окну и возвращаюсь, и все 4 переключателя включены. Если я выключу все выключатели и уйду и вернусь, все переключатели остаются выключенными. Нужно ли хранить отдельные значения строк? Если да, то каков наилучший способ сделать это? – Rico