代码之家  ›  专栏  ›  技术社区  ›  Max

在具有代理的视图控制器之间传递多个值

  •  0
  • Max  · 技术社区  · 8 年前

    我成功地在具有委托函数的视图控制器之间传递了一段数据(一个字符串变量、一个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。敏捷的 类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
        }
    }
    

    第二个VC。敏捷的

    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)
                    }
                }
            }
        }
    

    当我试图在代理中传递字典时,也会遇到同样的问题。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Vinit Ingale    8 年前

    使用以下简化代码:

       if let del = delegate, let stringData = stringTF.text, let amountData = amountTF.text  {
            del.userDidEnterData(stringData: stringData, amountData: amountData)
            dismiss(animated: true, completion: nil)
        }
    
        2
  •  0
  •   Monika mitruka    8 年前

    确保receivingAmountLabel插座已连接到FirstVC