我在 didSelectRow
函数中的选择器视图中遇到了我的应用程序问题
在某些情况下,选择器视图可能为零,因此 didSelectRow
中的所有指令都将读取 no value 并且应用程序崩溃 .
我尝试了多次使用不同的解决方案来防止这次崩溃,但它无法正常工作:
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if (self.MEDARRAY[row].value(forKey: "medNumDay") as? NSInteger) != nil {
let NumDay = self.MEDARRAY[row].value(forKey: "medNumDay") as? NSInteger
let NumMed = self.MEDARRAY[row].value(forKey: "medNum") as? NSInteger
Counter = (self.MEDARRAY[row].value(forKey: "takenCounter") as? NSInteger)!
theTimeSet = (self.MEDARRAY[row].value(forKey: "nextTime")as? Date)!
numberforday = (24 / NumDay!)
thegetting.timeStyle = DateFormatter.Style.short
TotalDose.text = String(NumDay! * NumMed!)
RemainDose.text = String(Int(TotalDose.text!)! - Counter!)
NextTimes.text = thegetting.string(from: theTimeSet!)
}
else{
TotalDose.text = "No"
RemainDose.text = "No"
NextTimes.text = "No"
}
}
Another try
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if (MEDARRAY.count < 1) {
let NumDay = self.MEDARRAY[row].value(forKey: "medNumDay") as? NSInteger
let NumMed = self.MEDARRAY[row].value(forKey: "medNum") as? NSInteger
Counter = (self.MEDARRAY[row].value(forKey: "takenCounter") as? NSInteger)!
theTimeSet = (self.MEDARRAY[row].value(forKey: "nextTime")as? Date)!
numberforday = (24 / NumDay!)
thegetting.timeStyle = DateFormatter.Style.short
TotalDose.text = String(NumDay! * NumMed!)
RemainDose.text = String(Int(TotalDose.text!)! - Counter!)
NextTimes.text = thegetting.string(from: theTimeSet!)
}
else{
TotalDose.text = "No"
RemainDose.text = "No"
NextTimes.text = "No"
}
}
问题是它仍然试图通过此 error: Index out of range 获得以下代码的值
let NumDay = self.MEDARRAY[row].value(forKey: "medNumDay") as? NSInteger
let NumMed = self.MEDARRAY[row].value(forKey: "medNum") as? NSInteger
Counter = (self.MEDARRAY[row].value(forKey: "takenCounter") as? NSInteger)!
theTimeSet = (self.MEDARRAY[row].value(forKey: "nextTime")as? Date)!
1 回答
如果您要识别的项目是选项,但是您需要它们具有非零值来执行该函数,请在函数的头部放置一个保护语句来测试每个值是否可用:
请注意,您可以使用逗号链接guard语句,并且这些常量不是选项:如果非零值可用,它们将初始化为非可选,否则将触发保护异常 . (另请注意对阵列测试和行输入的更正 . )
这样,如果您无法将这些常量初始化为非零值,则该函数将退出,这将阻止应用程序崩溃 . 当然,这并没有解决为什么值为零,但至少保持执行 .
希望有所帮助 .