【问题标题】:ParentView attributes set to nil after adding/removing a ViewController as a subview Swift在添加/删除 ViewController 作为子视图 Swift 后,ParentView 属性设置为 nil
【发布时间】:2015-08-10 18:08:23
【问题描述】:

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

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

视图控制器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

任何帮助或建议都会很棒

【问题讨论】:

    标签: ios swift


    【解决方案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实现容器视图控制器部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 2014-01-20
      • 2014-11-15
      • 1970-01-01
      • 2015-07-28
      • 1970-01-01
      相关资源
      最近更新 更多