我正在尝试使用委托(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/