将布尔变量分配给另一个布尔变量会使线程 1 BAD_EXC错误迅速 3



>我首先用这段代码声明一个变量 methodType

var methodType: Bool? = nil

然后,我继续使用像这样的分段控件(也称为methodType(设置此变量。

else if indexPath.row == 1 {
cell.methodType.isHidden = false
cell.methodType.selectedSegmentIndex = UISegmentedControlNoSegment
switch cell.methodType.selectedSegmentIndex{
case 0: methodType = true
case 1: methodType = false
default:
break
}

然后我去设置一个布尔的 CoreData 属性 = 到 methodType 变量,就像这样。

expense.cash = methodType!
expense.credit = !methodType!

但是,当我运行该应用程序时,由于某种原因,我收到线程 1 EXC 错误?做错了什么?

我将首先解释为什么会发生错误,然后解释您的误解是什么。

在这些行中:

cell.methodType.selectedSegmentIndex = UISegmentedControlNoSegment
switch cell.methodType.selectedSegmentIndex{
case 0: methodType = true
case 1: methodType = false
default:
break
}

您将cell.methodType.selectedSegmentIndex设置为UISegmentedControlNoSegment。我认为UISegmentedControlNoSegment是 -1 的常量值。 因此,当您打开它时,它会转到default分支,因为所选索引既不是 0 也不是 1。

因此,运行上述行后methodType未设置,仍然nil

然后你尝试使用!强制解开它,这当然会导致崩溃。

您误解了如何将selectedSegmentedIndex"绑定"到变量methodType。一种方法如下:

将当前 switch 语句替换为对addTarget的调用:

cell.methodType.addTarget(self, action: #selector(methodTypeChanged), for: .valueChanged)

然后将一个名为methodTypeChanged的方法添加到您的类中:

func methodTypeChanged(_ sender: UISegmentedControl) {
switch sender.selectedSegmentIndex{
case 0: methodType = true
case 1: methodType = false
default:
break
}
}

您还应该考虑用户未选择任何内容的情况。因此,在设置核心数据属性时,应检查methodType是否为nil:

if let methodType = self.methodType {
expense.cash = methodType
} else {
// user hasn't selected anything. show an error message or use a default value.
}

另外,我认为您应该删除credit属性。它似乎总是具有与cash相反的值,因此不需要它。您只需访问credit即可知道cash的价值。

相关内容

  • 没有找到相关文章

最新更新