首页 > 解决方案 > 代表仍然为零

问题描述

我正在尝试使用委托将数据从一个 ViewController 发送到另一个,但似乎无法获得正确的实例

我尝试在接收 ViewController 中的不同位置设置委托,包括 ViewDidLoad,但发送 ViewController 中的委托始终为零。

据我所知,这似乎是每个人都经历过的一般问题,而且我已经阅读了很多示例,尝试了它们,但无济于事。我不知道我是否遗漏了什么。如果你愿意,请提供一些启示。

下面是我最终得到的。

发送 ViewController:

protocol CreateChatDelegate: class{
    func appendChatData(_ sender: CreateChatViewController)
}

class CreateChatViewController: UIViewController {
     weak var delegate: CreateChatDelegate!

    @IBAction func createChat(_ sender: AnyObject) {
    delegate?.appendChatData(self)

        if delegate == nil {
            print("delegate unsuccessful")
        } else {
            print("delegate successful")
        }
}

接收视图控制器:


class ViewController: UIViewController{
    var createChatViewController: CreateChatViewController!
    override func viewDidLoad() {
        super.viewDidLoad()
    ...

    }
}

extension ViewController: CreateChatDelegate {  
    func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        // get the reference to the ViewController
        self.createChatViewController = segue.destination as? CreateChatViewController

        // set it as delegate
        self.createChatViewController?.delegate = self
        print("ViewController: delegate successful")
        }
    }

    func appendChatData(_ sender: CreateChatViewController) {
        print("ViewController: CreateChatDelegate called")
    }

}

此代码输出“委托不成功”,因为委托始终为零

标签: iosswiftdelegatessegue

解决方案


要成功配置 segue,您需要确保

1-导航由触发

self.performSegue(withIdentifier:"segue",sender:nil)

2-强制展开

self.createChatViewController = segue.destination as! CreateChatViewController

因为as?演员可能由于某种原因默默地失败


推荐阅读