如何在尝试在 UIPickerView 中选择行时捕获 nil 错误



显然,如果您在第一次运行视图时尝试从viewWillAppear中的UIPickerView中获取元素,应用程序将崩溃并返回nil错误。

如果我注释掉以下行并运行该应用程序,则一切正常。然后我取消注释掉以下行并再次运行,它工作正常并继续正常工作。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    myPicker.selectRow(0, inComponent: 0, animated: true)
}

我不知道有什么区别。也许应用程序中还有其他事情发生。有没有办法抓住最初的nil并吞下它?它将模仿视图的第一次访问并注释掉代码。首次访问视图后,不会返回nil

如果默认情况下将选取器声明为隐式解包可选,则只需可选链接它:

myPicker?.selectRow(0, inComponent: 0, animated: true)

您应该检查选取器是否为 nil,以及该组件中是否至少有一个组件/行。

if let myPicker = myPicker,
    myPicker.numberOfComponents > 0,
    myPicker.numberOfRows(inComponent: 0) > 0 {
    myPicker.selectRow(0, inComponent: 0, animated: true)
}

或者,您可以使用布尔值"吞下"viewWillAppear的第一个调用:

var firstViewWillAppearTime = true
override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    if firstViewWillAppearTime {
        firstViewWillAppearTime = false
    } else {
        myPicker.selectRow(0, inComponent: 0, animated: true)
    }
}

最新更新