gpt4 book ai didi

ios - 添加/删除 ViewController 作为 subview Swift 后,ParentView 属性设置为 nil

转载 作者:行者123 更新时间:2023-11-29 01:45:58 25 4
gpt4 key购买 nike

我有一个名为 VCA 的 ViewController,它将创建一个名为 VCB 的弹出式 ViewController。 VCB 允许用户选择一些信息,然后将其传递回 VCA。问题是,当我将 VCB 中的值传回 VCA 时,所有 VCA 属性现在都为 nil 或设置为其类型默认值这是在 VCA 中创建 VCB 的代码

let VCB = ViewControllerB(nibName: "ViewControllerB", bundle: nil)    
VCB.showInView(self.view)
VCB.delegate = ViewControllerA()

View Controller B

func showInView(aView: UIView!)
{
view.center = aView.center
aView.addSubview(self.view)
}

然后我关闭VCB

@IBAction func recordButtonTapped(sender: UIButton) {
self.delegate.someMethod(someValue: someType, ...)
self.view.removeFromSuperview()
}

但是当调用 someMethod(...) 时,VCA 中的属性设置为 nil,我得到一个

fatal error: unexpectedly found nil while unwrapping an Optional value

任何帮助或建议都会很棒

最佳答案

您正在像这样设置 VCB 的委托(delegate):

vcb.delegate = ViewControllerA()

那是实例化一个新的 VCA 实例。

您可能打算将 VCB 的委托(delegate)设置为 VCA 的现有实例。例如,如果从 VBA 的实例方法中完成,您只需执行以下操作:

vcb.delegate = self

--

顺便说一句,当将 VCB 的 View 添加到您的 View 层次结构中时,您确实应该执行包含调用 addChildViewControllerdidMoveToParentViewController:

let vcb = ViewControllerB(nibName: "ViewControllerB", bundle: nil)
addChildViewController(vcb)
vcb.showInView(self.view)
vcb.delegate = self
vcb.didMoveToParentViewController(self)

同样,当您删除它时,调用 willMoveToParentViewControllerremoveFromParentViewController:

@IBAction func recordButtonTapped(sender: UIButton) {
delegate.someMethod(someValue: someType, ...)

willMoveToParentViewController(nil)
view.removeFromSuperview()
removeFromParentViewController()
}

您总是希望让您的 View Controller 层次结构与您的 View 层次结构保持同步。请参阅 UIViewController Class Reference实现容器 View Controller 部分.

关于ios - 添加/删除 ViewController 作为 subview Swift 后,ParentView 属性设置为 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31926263/

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