我目前正在快速学习并开始使用我自己的第一个计算器。 这一切都用一个按钮来计算结果,但我想稍微改进一下。 UI基本上由两个用于数字的文本字段,一个用于操作符的分段控件和一个用于显示结果的标签组成。这就是我想要发生的事情:
每次更改分段控制值时,都应计算并显示新结果。
错误:
[Calculator.MainInterfaceViewController operatorChanged:]:无法识别的选择器发送到实例XXXX ... *由于未捕获的异常终止应用程序' NSInvalidArgumentException',原因:' - [Calculator.MainInterfaceViewController operatorChanged:]:无法识别的选择器发送到实例XXXX * 第一次抛出调用堆栈: ... libc ++ abi.dylib:以NSException类型的未捕获异常终止 (LLDB)
我的班级:
class MainInterfaceViewController: UIViewController, UITextFieldDelegate {
@IBOutlet var ersteZahl: UITextField!
@IBOutlet var zweiteZahl: UITextField!
@IBOutlet weak var ergebnisLabel: UILabel!
@IBOutlet weak var segment: UISegmentedControl!
override func viewDidLoad() {
super.viewDidLoad()
ersteZahl.delegate = self;
zweiteZahl.delegate = self;
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString string: String) -> Bool {
let newString = (textField.text! as NSString).stringByReplacingCharactersInRange(range, withString: string) as NSString
textField.text = newString as String
refreshUIElements()
return false
}
@IBAction func operatorChanged() {
refreshUIElements()
}
func refreshUIElements() {
let zahl1 = NSString(string: ersteZahl.text!).doubleValue
let zahl2 = NSString(string: zweiteZahl.text!).doubleValue
switch self.segment.selectedSegmentIndex {
case 0:
ergebnisLabel.text = "Ergebnis: \(zahl1 + zahl2)"
case 1:
ergebnisLabel.text = "Ergebnis: \(zahl1 - zahl2)"
case 2:
ergebnisLabel.text = "Ergebnis: \(zahl1 * zahl2)"
case 3:
if zahl2 == 0 {
ergebnisLabel.text = "Error: Cannot divide by 0."
return
}
ergebnisLabel.text = "Ergebnis: \(zahl1 / zahl2)"
default:
break
}
}
}
答案 0 :(得分:2)
我猜你在自动生成或尝试手动创建方法后修改了方法?
@IBAction's
需要sender
参数。像这样:
operatorChanged(sender: UISegmentedControl) {
}
完全删除方法,然后从故事板再次按住Ctrl键拖动到文件中。如果是弹出窗口,请选择操作并为方法命名。在此之后不要修改方法定义,否则会导致同样的问题。