gpt4 book ai didi

swift - 委托(delegate)回传不起作用

转载 作者:行者123 更新时间:2023-11-30 13:53:05 26 4
gpt4 key购买 nike

在我的主“viewcontroller A”中有以下内容作为segue。它是一个 PageViewController。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
if (segue.identifier == "postChoice") {
let dvc = segue.destinationViewController as! UINavigationController
let controller = dvc.popoverPresentationController
if (controller != nil) {
controller!.delegate = self
}
}
}

另外,在我的“Viewcontoller A”中,我在顶部有 PostChoiceDelegate 引用

我的segue链接到一个UINavigationController,它弹出到一个TableViewController。 “ View Controller B”

VCB

protocol PostChoiceDelegate: class {
func postChoiceSelected(whatStyle: String)
}

//in the vc class
weak var delegate: PostChoiceDelegate? = nil

然后,我有一个以编程方式制作的导航项,其目标操作为“uploadPost”,并且在 VCB 中,我有一个返回 nil 委托(delegate)的函数。它不应该返回“hello”,所以我将其传递给 VCA 来更新 postChoiceSelected() 的 VCA 中的函数,将 label.text 更新为 Hello?

func uploadPost() {
delegate?.postChoiceSelected("hello")
print(delegate?.postChoiceSelected("hello"))
dismissViewControllerAnimated(true, completion:nil)
}

我已经尝试过了!而不是?等,但没有任何作用?有意见吗?

最佳答案

也许您正在某处设置,但我在您发布的代码中没有看到它。

委托(delegate)字段是一个可选值,可能有值,也可能没有值。您没有将此委托(delegate)属性设置为任何内容,因此它为零,并且此行不会被执行:

delegate?.postChoiceSelected("hello")

因为委托(delegate)是nil

如何解决?只需将此属性设置为实现 PostChoiceDelegate

的对象实例

因此请确保以下行实际执行:

controller!.delegate = self

其中 delegate 表示对 PostChoiceDelegate 的弱引用,而不是其他任何内容,并且 self 实际上实现了 PostChoiceDelegate

更新:所以我会进行以下更改:

let controller = dvc.popoverPresentationController as! ViewControllerThatImplementsYourDelegate

否则,该委托(delegate)是 UIPopoverPresentationControllerDelegate 而不是 PostChoiceDelegate

关于swift - 委托(delegate)回传不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34010621/

26 4 0