2015-02-17 4 views
3

Когда я перехожу от одного контроллера вида к другому, переключатель первого контроллера сбрасывает себя и не сохраняет свое состояние. Как я могу сохранить его состояние, когда вернусь к нему после просмотра других контроллеров? И как мне сохранить его состояние после закрытия приложения. Я рассмотрел различные вопросы и ответы в stackoverflow, а также документацию на яблоки, но ничего не работает.Как сохранить состояние UISwitch при смене ViewControllers?

Вот мой класс для контроллера просмотра, который имеет переключатель.

class Days: UIViewController { 
    @IBOutlet weak var switchButton: UISwitch! 
    var switchState = true 
    let switchKey = "switchState" 
    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 
    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
    } 
    @IBAction func saveSwitchPressed(sender:AnyObject) { 
     if self.switchButton.on { 
      self.switchState = true 
      NSUserDefaults.standardUserDefaults().setBool(self.switchState, forKey: switchKey) 
      NSUserDefaults.standardUserDefaults().synchronize() 
      println(NSUserDefaults.standardUserDefaults().boolForKey(switchKey)) 
     } else { 
      self.switchState = false 
      NSUserDefaults.standardUserDefaults().setBool(self.switchState, forKey: switchKey) 
      NSUserDefaults.standardUserDefaults().synchronize() 
      println(NSUserDefaults.standardUserDefaults().boolForKey(switchKey)) 
     } 
    } 
} 

Я новичок для Swift и вообще Xcode. Заранее спасибо за ваше время и помочь :)

+0

Вы сохранили состояние в NSUserDefaults, но при загрузке вашего представления вы извлекли значение из NSUserDefaults и обновили коммутатор на основе этого значения? – Zhang

+0

Вам не нужно сохранять свое состояние вообще, если вы возвращаетесь к тому же экземпляру. Вернетесь ли вы к тому же экземпляру (как вы вернетесь)? Вы не должны использовать NSUserDefaults для этой цели, если вам не нужны данные для сохранения между запусками вашего приложения. – rdelmar

ответ

11

Xcode 8,3 • Swift 3,1

import UIKit 

class ViewController: UIViewController { 

    @IBOutlet weak var switchButton: UISwitch! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     switchButton.isOn = UserDefaults.standard.bool(forKey: "switchState") 
    } 

    @IBAction func saveSwitchPressed(_ sender: UISwitch) { 
     UserDefaults.standard.set(sender.isOn, forKey: "switchState") 
    } 
} 

enter image description here

+0

BTW Вы должны назвать свои классы, начиная с UpperCaseLetter –

+0

Я забыл упомянуть, что IBAction подключен к Sent Events: Value Changed –

+0

Спасибо за ваше время, но теперь я получаю сообщение об ошибке при просмотре контроллера в области отладки: фатальная ошибка: неожиданно найден nil при развертывании необязательного значения –

1

Поскольку вы синхронизации включения/выключения состояния переключателя вы могли бы на viewWillAppear: или viewDidAppear: установить состояние переключателя на значение, хранимое в NSUserDefaults

Что-то вдоль линий

override func viewWillAppear(animated: Bool) { 
    self.switchButton.on = NSUserDefaults.standardUserDefaults().boolForKey(switchKey) 
} 
+0

Я могу добавить эти строки кода или заменить его методом viewDidLoad? –

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