Программная настройка WKPickerItem не пойдет выше определенного значения?

Не могу понять это, с помощью кода ниже я позволил пользователю установить значение на WKPickerItem, храните его в UserDefaultsзатем загрузите его в следующий раз InterfaceController загружен и попытка установить PickerItem с сохраненным значением. Проблема в том, что если я установлю значение 1 - 7, затем вернусь назад, затем нажмите, чтобы снова показать этот контроллер интерфейса, и я увижу правильное значение в InterfacePicker. Однако, если я установлю его на 8, 9 или 10, InterfacePicker будет идти только до 7? правильные индексы и элементы выводятся на консоль, это просто фактическое значение в интерфейсе неверно?

import WatchKit
import Foundation


class SettingsInterfaceController: WKInterfaceController {

    let defaults = UserDefaults.standard


    var shiftTimerHapticIntervalOptions = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

    var userShiftTimerHapticInterval = 10


    @IBOutlet var shiftTimerHapticIntervalPicker: WKInterfacePicker!


    @IBAction func shiftTimerHapticIntervalDidChange(_ value: Int) {
         WKInterfaceDevice.current().play(.click)
        userShiftTimerHapticInterval = shiftTimerHapticIntervalOptions[value]
    }


    override func awake(withContext context: Any?) {
        super.awake(withContext: context)

        let shiftTimerHapticIntervalPickerItems: [WKPickerItem] = shiftTimerHapticIntervalOptions.map {
            let pickerItem = WKPickerItem()
            pickerItem.caption = $0.description
            pickerItem.title = $0.description
            return pickerItem
        }

        shiftTimerHapticIntervalPicker.setItems(shiftTimerHapticIntervalPickerItems)

    }

    override func willActivate() {
        // This method is called when watch view controller is about to be visible to user
        super.willActivate()

        // Look up user settings

        if let userShiftTimerHapticIntervalUnwrapped = defaults.value(forKey: userShiftTimerHapticIntervalKey) as? Int {
            userShiftTimerHapticInterval = userShiftTimerHapticIntervalUnwrapped
            if let indexOfUserShiftTimerHapticInterval = shiftTimerHapticIntervalOptions.index(of: userShiftTimerHapticInterval) {                shiftTimerHapticIntervalPicker.setSelectedItemIndex(indexOfUserShiftTimerHapticInterval)
            }
        }
    }

    override func didDeactivate() {
        // This method is called when watch view controller is no longer visible
        super.didDeactivate()

        defaults.set(userShiftTimerHapticInterval, forKey: userShiftTimerHapticIntervalKey)

    }

}

1 ответ

Решение

Попробуйте позвонить

shiftTimerHapticIntervalPicker.setSelectedItemIndex(indexOfUserShiftTimerHapticInterval)

в интерфейсном контроллере didAppear() функция вместо в willActivate() функция. Я видел некоторые из тех же вещей, но более случайные, когда пытался установить индекс сборщика в willActivate() функция.

Другие вопросы по тегам