現在、私は最初の自分の電卓で迅速に学習しています。 ボタンを使って結果を計算しましたが、少し改善したかったのです。 UIは、基本的に数値の2つのテキストフィールド、演算子の1つのセグメント化されたコントロール、および結果を表示する1つのラベルで構成されます。だから私は何をしたいのですか:セグメント化された制御インデックスにアクセスしようとすると、スウィフトがエラーをスローする
セグメント化された制御値を変更するたびに、新しい結果を計算して表示する必要があります。
エラー:
[Calculator.MainInterfaceViewController operatorChanged:]:認識されていないセレクタがキャッチされない例外により 'NSInvalidArgumentException'、理由にアプリを終了XXXX ... *インスタンスに送信:「 - [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
}
}
}
どこで 'operatorChanged'を呼び出しましたか?問題は、あなたのメソッドにはパラメータはありませんが、エラーは、同じ名前でパラメータを持つメソッドを呼び出しているというエラーです(後ろに ":"があります)。ストーリーボードとリンクしましたか? YESの場合は、IBActionが何者か、送信者、またはストーリーボードで再リンクすることを受け入れるために、あなたの名前を 'operatorChanged'に変更します。 – Larme
@Larmeええ、私はメインストーリーボードでリンクしました。私はすでにそれを再リンクしようとしました。それを修正する方法がありますか?ありがとうございます:) – dv02