Значение NSButton по умолчанию в Swift

Я новичок в быстром использовании Xcode, пытаясь написать небольшое приложение с контрольным списком. После установки/снятия флажка и выхода из приложения состояние просто исчезнет в следующий раз, когда я снова открою его. Мне интересно, как я могу сохранить текущее состояние NSButton по умолчанию, чтобы в следующий раз, когда я открою приложение, оно отображалось в том же состоянии, когда я его закрыл. Я пробовал ниже практику:

Установить значение по умолчанию:

@IBAction func Check1(_ sender: NSButton) {
        UserDefaults.standard.set(Check1.state, forKey:"Check1status")
    }

Чтение значения по умолчанию:

override var representedObject: Any? {
    didSet {
        Check1.state = UserDefaults.standard.bool(forKey:"Check1status")
    }
}

Однако я получил сообщение об ошибке: "Невозможно присвоить значение типа "Bool" типу "NSControl.StateValue""

Как я могу исправить эту ошибку? Спасибо.


person Jonnce    schedule 12.04.2018    source источник
comment
Проверьте UserDefaults. stackoverflow.com/q/31203241/3151675   -  person Tamás Sengel    schedule 12.04.2018
comment
проверьте это еще раз ясно в соответствии с вашим вопросом. stackoverflow.com/questions/43429699/   -  person MRizwan33    schedule 12.04.2018
comment
Я получил сообщение об ошибке: значение типа «NSButton» не имеет члена «isSelected», когда я пытался использовать SelfKey.isSelected. Должен ли я использовать другой элемент в NSButton?   -  person Jonnce    schedule 12.04.2018
comment
Возможный дубликат UserDefault для сохранения состояния кнопки   -  person Daij-Djan    schedule 12.04.2018
comment
isSelected==true это состояние==NSOnState   -  person Daij-Djan    schedule 12.04.2018
comment
isSelected==false это состояние==NSOffState   -  person Daij-Djan    schedule 12.04.2018
comment
Когда я попытался установить значение по умолчанию SelfKey.state = UserDefaults.standard.bool(forKey: State) после того, как я установил: UserDefaults.standard.set(SelfKey.state, forKey:State), я получил сообщение об ошибке: Невозможно присвоить значение типа ' Bool», чтобы ввести «NSControl.StateValue. Что я должен использовать, кроме UserDefaults.standard.bool?   -  person Jonnce    schedule 12.04.2018


Ответы (1)


Потому что state не является логическим значением. В Objective-C это целое число. В Swift это структура, rawValue которой является целым числом. Кроме того, не устанавливайте состояние в representedObject.didSet. Сделайте это в viewDidLoad:

override func viewDidLoad() {
    super.viewDidLoad()

    // When your app launches for the very first time on the user computer, set it to On
    UserDefaults.standard.register(defaults: [
        "Check1Status": NSControl.StateValue.on.rawValue
    ])

    let state = NSControl.StateValue(UserDefaults.standard.integer(forKey:"Check1status"))
    check1.state = state
}

@IBAction func check1(_ sender: NSButton) {
    // Swift performs do some background magic if you type check1.state
    // Adding rawValue make it clear that you are writing an integer to the UserDefaults
    UserDefaults.standard.set(check1.state.rawValue, forKey:"Check1status")
}
person Code Different    schedule 13.04.2018