[英]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()
}
}
I am trying to create 3 pickerViews to select a year, a month, and a day. 我正在尝试创建3个pickerViews以选择一年,一个月和一天。 And there is a label showDateLabel
which is supposed to show the result (like 2019 4 21). 并且有一个标签showDateLabel
应该显示结果(例如2019 4 21)。
When running simulator, 运行模拟器时,
thread 1:
exc_bad_instruction(code=exc_i386_invop,subcode=0x0)
always shows in func showDateLabelSetting()
part. 总是显示在func showDateLabelSetting()
部分中。 And I have tried running simulator without the label part and it can run properly. 我尝试了运行没有标签部分的模拟器,它可以正常运行。 Also It says 还说
fatal error: unexpectedly found nil while unwrapping an Optional value
in the debug area just that I am not sure what to do about it. 在调试区域,只是我不确定该怎么做。
This is what in the debug area (I am still not sure which part is the useful info so I copy paste it all here) 这就是调试区域中的内容(我仍然不确定哪一部分是有用的信息,因此我将其全部粘贴在此处)
Left part 左半部
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
Right part 右侧部分
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)
Can anyone tell what is the problem here and how to solve it? 谁能说出这里的问题是什么以及如何解决? Thanks 谢谢
The showDateLabel
has not initialized. showDateLabel
尚未初始化。 Try this: 尝试这个:
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.