How to Solve problem UIPickerView Fatal error: Index out of range [IOS Swift 5.1 Xcode 11.2]
How to Solve problem UIPickerView Fatal error: Index out of range [IOS Swift 5.1 Xcode 11.2]
我正在尝试获取 UIPickerView
的选定值
当 运行 应用程序。但是我得到错误,
Fatal error: Index out of range
我在numberOfRowsInComponent
函数中通过print("selected ==>\(selected)")
调试。我通过调试得到 selected
的值 0.
如何解决这个问题?
Value From Postman
- Plandate function
http://xxx.xxx.xxx.xx/ProjectService/PODService.svc/GetPlanDate/2
"[ { \"PlanDate\": \"26/08/2019\", \"PlanDateFullFormat\": \"20190826\" }, { \"PlanDate\": \"27/08/2019\", \"PlanDateFullFormat\": \"20190827\" }]"
- PlanShipment
http://xxx.xxx.xxx.xx/ProjectService/PODService.svc/GetShipment/2/20190826
"[ { \"Shipment\": \"4505023278\" }, { \"Shipment\": \"4505023279\" }]"
http://xxx.xxx.xxx.xx/ProjectService/PODService.svc/GetShipment/2/20190827
"[ { \"Shipment\": \"4505023244\" }, { \"Shipment\": \"4505023274\" }]"
Return Value From JSON
- Plandate function
http://xxx.xxx.xxx.xx/ProjectService/PODService.svc/GetPlanDate/2
pplandateCategories ==>["20190826", "20190827"]
- PlanShipment
http://xxx.xxx.xxx.xx/ProjectService/PODService.svc/GetShipment/2/20190827
getpShipmentDCPlanData ==>["4505023244", "4505023274"]
Swift
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 2
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if component == 0 {
return pPlandateCategories.count
}else{
let selected = pickerview.selectedRow(inComponent:0)
return pShipmentCategories[selected].count ———>. Thread 1: Fatal error: Index out of range
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if component == 0 {
return pPlandateCategories[row]
}else{
let selected = pickerview.selectedRow(inComponent:0)
return pShipmentCategories[selected][row]
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if component == 0{
pickerview.reloadComponent(1)
}else{
let selected = pickerview.selectedRow(inComponent:0)
// getpPlanDatePickerView.text = "PlanDate:" + " " + pplandateCategories[selected][row]
someTextField.text = "Shipment:" + " " + pShipmentCategories[selected][row]
}
}
Error when Run Project
My WebService ==> http://xxx.xxx.xxx.xx/ProjectService/PODService.svc/GetPlanDate/2GetPlanDate/2
Fatal error: Index out of range
2019-12-19 10:55:14.459056+0700 pickerDateAndShipment[782:19020] Fatal error: Index out of range
只有当组件的数据异步加载并且数据源在第一次重新加载 table 视图时为空时才会发生崩溃。
为了避免在 pShipmentCategories
数组为空时进行崩溃检查
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if component == 0 {
return pPlandateCategories.count
} else {
let selected = pickerview.selectedRow(inComponent:0)
return pShipmentCategories.isEmpty ? 0 : pShipmentCategories[selected].count
}
}
我正在尝试获取 UIPickerView
的选定值
当 运行 应用程序。但是我得到错误,
Fatal error: Index out of range
我在numberOfRowsInComponent
函数中通过print("selected ==>\(selected)")
调试。我通过调试得到 selected
的值 0.
如何解决这个问题?
Value From Postman
- Plandate function
http://xxx.xxx.xxx.xx/ProjectService/PODService.svc/GetPlanDate/2
"[ { \"PlanDate\": \"26/08/2019\", \"PlanDateFullFormat\": \"20190826\" }, { \"PlanDate\": \"27/08/2019\", \"PlanDateFullFormat\": \"20190827\" }]"
- PlanShipment
http://xxx.xxx.xxx.xx/ProjectService/PODService.svc/GetShipment/2/20190826
"[ { \"Shipment\": \"4505023278\" }, { \"Shipment\": \"4505023279\" }]"
http://xxx.xxx.xxx.xx/ProjectService/PODService.svc/GetShipment/2/20190827
"[ { \"Shipment\": \"4505023244\" }, { \"Shipment\": \"4505023274\" }]"
Return Value From JSON
- Plandate function
http://xxx.xxx.xxx.xx/ProjectService/PODService.svc/GetPlanDate/2
pplandateCategories ==>["20190826", "20190827"]
- PlanShipment
http://xxx.xxx.xxx.xx/ProjectService/PODService.svc/GetShipment/2/20190827
getpShipmentDCPlanData ==>["4505023244", "4505023274"]
Swift
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 2
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if component == 0 {
return pPlandateCategories.count
}else{
let selected = pickerview.selectedRow(inComponent:0)
return pShipmentCategories[selected].count ———>. Thread 1: Fatal error: Index out of range
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if component == 0 {
return pPlandateCategories[row]
}else{
let selected = pickerview.selectedRow(inComponent:0)
return pShipmentCategories[selected][row]
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if component == 0{
pickerview.reloadComponent(1)
}else{
let selected = pickerview.selectedRow(inComponent:0)
// getpPlanDatePickerView.text = "PlanDate:" + " " + pplandateCategories[selected][row]
someTextField.text = "Shipment:" + " " + pShipmentCategories[selected][row]
}
}
Error when Run Project
My WebService ==> http://xxx.xxx.xxx.xx/ProjectService/PODService.svc/GetPlanDate/2GetPlanDate/2
Fatal error: Index out of range
2019-12-19 10:55:14.459056+0700 pickerDateAndShipment[782:19020] Fatal error: Index out of range
只有当组件的数据异步加载并且数据源在第一次重新加载 table 视图时为空时才会发生崩溃。
为了避免在 pShipmentCategories
数组为空时进行崩溃检查
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if component == 0 {
return pPlandateCategories.count
} else {
let selected = pickerview.selectedRow(inComponent:0)
return pShipmentCategories.isEmpty ? 0 : pShipmentCategories[selected].count
}
}