在将ViewController添加/删除为子视图Swift

时间:2015-08-10 18:08:24

标签: ios swift

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

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

ViewControllerB

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

任何帮助或建议都会很棒

1 个答案:

答案 0 :(得分:1)

您正在设置VCB的委托,如下所示:

vcb.delegate = ViewControllerA()

即实例化VCA的新实例。

您可能意味着将VCB的委托设置为现有的VCA实例。例如,如果在VBA的实例方法中完成,您只需执行以下操作:

vcb.delegate = self

-

顺便说一句,将VCB的视图添加到视图层次结构中时,您确实应该进行包含调用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()
}

您始终希望保持视图控制器层次结构与视图层次结构同步。请参阅UIViewController Class Reference实施容器视图控制器部分。