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)。UILabel返回零
當運行的模擬器,
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'是否正確連接到故事板? –
@ILikeTau這是我第一次以編程方式添加UILabel,所以我不知道該怎麼做。不是'view.addSubview(showDateLabel)'意味着連接'showDateLabel'到故事板?或者我還應該做些什麼來連接它? – morphymore
我看到你沒有初始化你的'UILabel',並認爲你已經通過故事板完成了它。請記住,你需要它創建一個對象,然後才能使用它。 –