gpt4 book ai didi

ios - 委托(delegate)给另一个 View Controller 不起作用

转载 作者:行者123 更新时间:2023-11-28 10:06:57 26 4
gpt4 key购买 nike

我的委托(delegate)发件人类:

import UIKit

protocol tapDelgation:class {
func tapConfirmed(message:String)
}

class ViewController: UIViewController {
weak var delegate:tapDelgation?

@IBAction func deligateSenderAction(_ sender: Any) {
var data = "hello world"
print(data)
self.delegate?.tapConfirmed(message: data)
}
}

我的接收者类:

import UIKit

class NextViewController: UIViewController {
weak var vc:ViewController? = ViewController()

override func viewDidLoad() {
super.viewDidLoad()
vc?.delegate = self
}
}

extension NextViewController : tapDelgation {
func tapConfirmed(message: String) {
print(message)
}
}

预期结果:发送方 vc 上的按钮被按下,接收方 vc 将弹出一个控制台打印。但徒劳无功,什么也没有发生。有谁知道为什么会这样?如果不可能,那为什么?

最佳答案

在我看来这像是一个内存管理问题。

第一个问题:使用像 ViewController() 这样的默认初始化器创建 View Controller 几乎从来都不是正确的做法。因为它不会有任何 View 内容。

您没有解释如何创建和显示您的 NextViewController 和您的 ViewController

看起来NextViewControllerViewController的引用很弱,ViewController的delegate point也很弱(delegate references should almost always虚弱。)

这一行:

weak var vc:ViewController? =  ViewController()

将导致 NextViewController 创建一个不属于任何人的 ViewController 实例,因此它将立即被释放并且 vc变量将恢复为零。当您到达 NextViewController 的 viewDidLoad 时,vc 将为 nil,因此 vc?.delegate = self 行中的可选绑定(bind)不会做任何事情。

NextViewControllervc 变量几乎肯定是一个强引用,而不是弱引用,但您没有显示 ViewController 是如何获取的显示在屏幕上,因此不清楚您要做什么。

关于ios - 委托(delegate)给另一个 View Controller 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52238267/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com