繁体   English   中英

UILabel返回nil

[英]UILabel returns nil

import UIKit

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

    var pickerViewYears: UIPickerView!
    var pickerViewMonths: UIPickerView!
    var pickerViewDays: UIPickerView!
    var showDateLabel: UILabel!

    var years = [2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020]
    var months = [01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12]
    var days = [01 ,02 ,03 ,04 ,05, 06, 07, 08, 09, 10 ,11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]

    override func viewDidLoad() {
        super.viewDidLoad()
        pickerViewYearsSetting()
        pickerViewMonthsSetting()
        pickerViewDaysSetting()
        showDateLabelSetting()
    }

    func pickerViewYearsSetting() {
        pickerViewYears = UIPickerView()
        pickerViewYears.frame = CGRectMake(0, 0, 100, 100)
        pickerViewYears.center.x = view.center.x - 100
        pickerViewYears.center.y = view.center.y
        view.addSubview(pickerViewYears)
        //pickerViewYears.layer.backgroundColor = UIColor(red: 255, green: 255, blue: 255, alpha: 0.5).CGColor

        pickerViewYears.dataSource = self
        pickerViewYears.delegate = self
    }

    func pickerViewMonthsSetting() {
        pickerViewMonths = UIPickerView()
        pickerViewMonths.frame = CGRectMake(0, 0, 100, 100)
        pickerViewMonths.center = view.center
        view.addSubview(pickerViewMonths)
        //pickerViewMonths.layer.backgroundColor = UIColor(red: 255, green: 255, blue: 255, alpha: 0.5).CGColor

        pickerViewMonths.dataSource = self
        pickerViewMonths.delegate = self
    }

    func pickerViewDaysSetting() {
        pickerViewDays = UIPickerView()
        pickerViewDays.frame = CGRectMake(0, 0, 100, 100)
        pickerViewDays.center.x = view.center.x + 100
        pickerViewDays.center.y = view.center.y
        view.addSubview(pickerViewDays)
        //pickerViewMonths.layer.backgroundColor = UIColor(red: 255, green: 255, blue: 255, alpha: 0.5).CGColor

        pickerViewDays.dataSource = self
        pickerViewDays.delegate = self
    }


    // returns the number of 'columns' to display.
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return 1

    }

    // returns the # of rows in each component..
    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if pickerView == pickerViewYears {
            return years.count
        }
        else if pickerView == pickerViewMonths {
            return months.count
        }
        else {
            return days.count
        }
    }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
        if pickerView == pickerViewYears {
            return "\(years[row])"
        }
        else if pickerView == pickerViewMonths {
            return "\(months[row])"
        }
        else {
            return "\(days[row])"
        }
    }

    func showDateLabelSetting() {
        let selectedRowYears = pickerViewYears.selectedRowInComponent(0)
        let selectedRowMonths = pickerViewMonths.selectedRowInComponent(0)
        let selectedRowDays = pickerViewDays.selectedRowInComponent(0)
        showDateLabel.frame = CGRectMake(0, 0, 150, 100)
        showDateLabel.center.y = view.center.y + 150
        showDateLabel.center.x = view.center.x
        showDateLabel?.text = "\(years[selectedRowYears]) \(months[selectedRowMonths]) \(days[selectedRowDays])"

        view.addSubview(showDateLabel)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


}

我正在尝试创建3个pickerViews以选择一年,一个月和一天。 并且有一个标签showDateLabel应该显示结果(例如2019 4 21)。

运行模拟器时,

thread 1: 
exc_bad_instruction(code=exc_i386_invop,subcode=0x0) 

总是显示在func showDateLabelSetting()部分中。 我尝试了运行没有标签部分的模拟器,它可以正常运行。 还说

fatal error: unexpectedly found nil while unwrapping an Optional value

在调试区域,只是我不确定该怎么做。

这就是调试区域中的内容(我仍然不确定哪一部分是有用的信息,因此我将其全部粘贴在此处)

左半部

    self    
    PickerViewPractice001.ViewController    0x00007fdcabc250e0  
    UIKit.UIViewController  
    UIViewController        
    pickerViewYears UIPickerView!   0x00007fdcabd42300
    pickerViewMonths    UIPickerView!   0x00007fdcabd3f460
    pickerViewDays  UIPickerView!   0x00007fdcabd3f8c0
    showDateLabel   UILabel!    nil None
    years   [Int]   20 values   
    months  [Int]   12 values   
    days    [Int]   31 values   
    selectedRowYears    Int 0
    selectedRowMonths   Int 0
    selectedRowDays Int 0

右侧部分

2015-09-04 10:13:49.439 PickerViewPractice001[50739:3947139] -[UIPickerView setFrame:]: invalid height value 100.0 pinned to 162.0 
2015-09-04 10:13:49.439 PickerViewPractice001[50739:3947139] -[UIPickerView setFrame:]: invalid height value 100.0 pinned to 162.0 
2015-09-04 10:13:49.440 PickerViewPractice001[50739:3947139] -[UIPickerView setFrame:]: invalid height value 100.0 pinned to 162.0 
fatal error: unexpectedly found nil while unwrapping an Optional value
(lldb) 

谁能说出这里的问题是什么以及如何解决? 谢谢

showDateLabel尚未初始化。 尝试这个:

func showDateLabelSetting() {
    let selectedRowYears = pickerViewYears.selectedRowInComponent(0)
    let selectedRowMonths = pickerViewMonths.selectedRowInComponent(0)
    let selectedRowDays = pickerViewDays.selectedRowInComponent(0)
    showDateLabel = UILabel() // Added this line
    showDateLabel.frame = CGRectMake(0, 0, 150, 100)
    showDateLabel.center.y = view.center.y + 150
    showDateLabel.center.x = view.center.x
    showDateLabel?.text = "\(years[selectedRowYears]) \(months[selectedRowMonths]) \(days[selectedRowDays])"

    view.addSubview(showDateLabel)
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM