将视图控制器视图添加到子视图时找到nil

时间:2017-04-22 23:23:23

标签: ios swift

我有一个带有表视图的视图控制器,需要将其作为子视图添加到另一个视图控制器,但是当我添加视图控制器的视图时,我得到一个指向该表的零。所有的连接都存在,但无法解决它崩溃的原因。

儿童控制器

class childController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var table: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        table.delegate = self
        table.dataSource = self
    }

}

家长控制器

func presentChildController() {
    let childVC = childController()
    self.view.addSubview(childVC.view)
}

1 个答案:

答案 0 :(得分:1)

此代码完全违法:

func presentChildController() {
    let childVC = childController()
    self.view.addSubview(childVC.view)
}

您不能简单地创建一个视图控制器,抓取它的视图,并将其视图填充到您自己的视图中。如果您希望视图控制器(self)充当父视图控制器,并且childController充当子视图控制器,则有careful dance你必须这样做 - 而你不是那种舞蹈。因此,childVC(您的childController会立即失效,这就是您遇到的nil崩溃的原因。

顺便说一句,另一个可能的原因是,如果你的childController是在故事板中设计的,childController()是错误的实例化方法 - 故事板中的表格视图永远不会存在。您必须确保视图控制器的视图是您设计的视图。