【问题标题】:Swift: fatal error: unexpectedly found nil while unwrapping an Optional value when initializing UIlabel valueSwift:致命错误:在初始化 UIlabel 值时展开可选值时意外发现 nil
【发布时间】:2015-09-17 07:49:30
【问题描述】:

我对 swift 很陌生(我通常使用 Java 和 C++ 编写代码),我正在构建我的第一个 ios 应用程序。 在这个应用程序中,我正在尝试创建一个选择器视图,问题是当我尝试将标签点的初始值设置为选择器视图(数组)中的第一项时,它会弹出错误

"致命错误:在展开 Optional 时意外发现 nil 价值”

这是我正在工作的代码

class ViewController: UIViewController, UIPickerViewDelegate{


    @IBOutlet var usertypeLabel: UILabel!
    @IBOutlet var Picker: UIPickerView!
    var usertype_array = ["patient","nurse"]
    //var usertype: String!
    override func viewDidLoad() {

        // Do any additional setup after loading the view, typically from a nib.
        super.viewDidLoad()
        usertypeLabel.text = usertype_array[0] //THIS IS WHERE THE ERROR OCCURS
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{
        return 1
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
        return usertype_array.count
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String!{
        return usertype_array[row]
    }

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int){
        var rowselected = usertype_array[row]
        usertypeLabel.text = rowselected        
    }
}

知道为什么会发生错误吗?请注意,如果我删除那行代码,它仍然会运行。谢谢。

【问题讨论】:

  • 贴出来的代码没有错。我认为错误在其他地方。即使是行 usertypeLabel.text = usertype_array[0] 也应该可以正常运行。
  • 我猜你没有将你的 IBOutlet 与故事板中的标签联系起来
  • 您是否在故事板中创建了标签并将其连接到 IBOutlet?
  • 我控制将情节提要中的标签拖动到 Viewcontroler.swift 中的代码。我是否错过了将其连接到其他地方的任何步骤?

标签: ios swift null


【解决方案1】:

您缺少UIPickerViewDataSource 并在此处添加:

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource

并在您的 viewDidLoad 方法中添加:

Picker.dataSource = self
Picker.delegate = self

这是您的完整工作代码:

import UIKit

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource{


    @IBOutlet var usertypeLabel: UILabel!
    @IBOutlet var Picker: UIPickerView!
    var usertype_array = ["patient","nurse"]
    //var usertype: String!
    override func viewDidLoad() {

        // Do any additional setup after loading the view, typically from a nib.
        super.viewDidLoad()
        Picker.dataSource = self
        Picker.delegate = self
        usertypeLabel.text = usertype_array[0] //THIS IS WHERE THE ERROR OCCURS
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{
        return 1
    }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
        return usertype_array.count
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String!{
        return usertype_array[row]
    }

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int){
        var rowselected = usertype_array[row]
        usertypeLabel.text = rowselected
    }
}

如果您的插座正确,它将正常工作。

查看THIS 示例了解更多信息。

【讨论】:

  • 我尝试了您的代码,但在 Picker.dataSource = self 处出现错误。我不确定我是否错过了任何地方......
  • 感谢您的帮助 Dharmesh。抱歉,这听起来可能很愚蠢,但我该如何检查呢?我在情节提要中创建了选择器和标签,对于选择器,我转到连接检查器并将委托和数据源链接到视图控制器中的黄色按钮。然后我控制将这两个拖到 Viewcontroller.swift 是正确的方法和顺序吗?谢谢
  • 这里是:s000.tinyupload.com/index.php?file_id=50687844781234858340 非常感谢您的帮助 Dharmesh。真的很感激。如果可能的话,我很想知道为什么会出现这个错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-30
  • 2015-03-04
  • 1970-01-01
相关资源
最近更新 更多