2017-10-11 12 views
0

デリゲート関数を持つビューコントローラ間で1つのデータ(1つのString変数、1つのInt変数など)を渡すことができました。しかし、デリゲート関数を使ってさまざまなデータを渡すことはできませんでした。デリゲートを持つビューコントローラ間で複数の値を渡す

私は次のエラーを取得する:

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x7faea770db60> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key receivingAmountLabel.' 

私はreceingAmountLabelを削除すると、エラーが別のUI要素になります。その要素を削除すると、別の要素に移動します。

すべてのUI要素は、必要に応じて接続されています。このようなコードを見ての関連作品:

FirstVC.swift クラスFirstVC:のUIViewController、DataSentDelegateMax {

@IBOutlet weak var receivingStringLabel: UILabel! 
@IBOutlet weak var receivingAmountLabel: UILabel! 

func userDidEnterData(stringData: String, amountData: Int) { 
    receivingStringLabel.text = stringData 
    receivingAmountLabel.text = String(amountData) 
} 


override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if (segue.identifier == "showSecondVC") { 
     let secondVC = segue.destination as! SecondVC 
     secondVC.delegate = self 
    } 
} 

SecondVC.swift

protocol DataSentDelegateMax { 
    func userDidEnterData(stringData: String, amountData: Int) 
} 

    @IBOutlet weak var stringTF: UITextField! 
    @IBOutlet weak var amountTF: UITextField! 

    var delegate: DataSentDelegateMax? = nil 

    @IBAction func sendButtonAction(_ sender: Any) { 
     if delegate != nil { 
      if (stringTF.text != nil) { 
       if (Int(amountTF.text!) != nil) { 
        let stringData = stringTF.text 
        let amountData = Int(amountTF.text!) 
        delegate?.userDidEnterData(stringData: stringData!, amountData: amountData!) 
        dismiss(animated: true, completion: nil) 
       } 
      } 
     } 
    } 

私は同じ問題を取得しますデリゲートで辞書を渡そうとするとき。簡略化されたコード以下

+0

に接続されていることを確認してください。それは 'FirstVC'ではなく' UIViewController'です。これが誤った接続(名前が変更されたなど)に起因する場合は、 '[ setValue:forUndefinedKey:]:' '[ setValue:forUndefinedKey:]: ' – Larme

+0

IBOutletsをもう一度取り外して接続しますか? –

+0

このエラーは、通常、xibまたはストーリーボードのIBOutletが無効な場合(設定されていて、名前が変更された場合や削除された場合など)に発生します。これまでに示唆したように、IBファイルで無効な参照がないかチェックしてください。 –

答えて

0

用途:

if let del = delegate, let stringData = stringTF.text, let amountData = amountTF.text { 
     del.userDidEnterData(stringData: stringData, amountData: amountData) 
     dismiss(animated: true, completion: nil) 
    } 
+0

問題の解決策ではありませんが、アドバイスのおかげでありがとうございます。 – Max

0

receivingAmountLabel出口はあなたがInterface Builderで `UIViewController`のが正しいクラスを設定しなかったFirstVC