ios - 委托(delegate)仍然为零

标签 ios swift delegates segue

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

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

据我所知,这是每个人似乎都会遇到的平均问题,我已经阅读了相当多的示例,尝试过它们,但没有效果。我不知道我是否遗漏了一些东西。如果您愿意,请透露一些信息。

下面是我最终得到的结果。

发送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")
        }
}

接收ViewController:


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

}

此代码输出“委托(delegate)失败”,因为委托(delegate)始终为 nil

最佳答案

您使用的方法不正确。您应该使用新的:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    ....
}

注意到override关键字了吗?如果您在编写 viewController 方法时没有看到这一点,则意味着您没有调用原始方法并且拼写错误了函数签名。

注意:如果您的目标是旧版 iOS 并使用旧版 Xcode,方法名称可能会有所不同,您应该写下方法名称并让 AutoComplete 提供帮助您找到了正确的人。

关于ios - 委托(delegate)仍然为零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56524400/

相关文章:

ios - 无法在 Interface Builder 中更改 TableView 的大小

ios - 无法通过 iphone sdk 中的 [FBSDKAccessToken currentAccessToken] 获取访问 token

ios - 如何从外部访问for循环并使其 swift 停止

swift - 如何从 firestore 文档中检索 key (使用 swift 4/ios)

C++、委托(delegate)、应用程序崩溃、未知原因

c# - RelayCommand 和委托(delegate),尝试理解委托(delegate)

ios - 如何将 Firebase 中的用户个人列表抓取到表格 View

ios - 修改多张照片时只有一个 iOS 权限对话框

swift - 按 Y 移动 SKSpriteNode - Swift 2 + SpriteKit

swift - 发现所有指向 Controller 的委托(delegate)?