【发布时间】:2026-01-20 14:00:02
【问题描述】:
我正在尝试使用委托将数据从一个 ViewController 发送到另一个,但似乎无法获得正确的实例
我尝试在接收 ViewController 中的不同位置设置委托,包括 ViewDidLoad,但发送 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")
}
}
这段代码输出“delegate unsuccessful”,因为delegate总是nil
【问题讨论】:
-
print(type(of: segue.destination))insideprepareForSegue...看看目标类型是什么。 -
谢谢。如果一开始没有调用
prepareForSegue,我该怎么办?我注意到这似乎是问题所在。 -
你使用什么 iOS 和 Xcode 版本?
-
检查答案。