簡體   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