是否自动保留和恢复UIViewController视图的子视图?

时间:2015-07-22 10:54:23

标签: ios uiview uiviewcontroller

我正在努力了解国家保护和修复的工作原理。 我读过书籍,教程等等。有些事情只是逃避了我的理解。 这是其中之一。我有一个带有正确的restorationIdentifier的UIViewController。

viewDidLoad()函数中,我添加了一个UITableView作为VC视图的子视图。 像这样:

tableView = UITableView(frame: self.view.bounds, style: .Plain)
tableView.delegate = self
tableView.dataSource = self
view.addSubview(tableView)

我无法理解的是VC的视图及其子视图是否会自动保留 并恢复。换句话说,我必须每次都创建VC视图的子视图 viewDidLoad()中的时间或者我应该检查VC视图的子视图是否存在?

当我第一次阅读关于国家保护和恢复的时候,我想到了 VC的视图层次结构(其视图和视图的子视图)将自动保留。但现在我不确定 那。在view.subviews.count中调用时,viewDidLoad()始终返回0(零)。

我误解了什么?

谢谢。

1 个答案:

答案 0 :(得分:0)

来自Apple的docs

保留时,视图控制器会保留其视图层次结构中也具有恢复标识符的任何视图的状态。视图控制器不会自动保存任何其他状态。如果要实现自定义容器视图控制器,则必须自己对任何子视图控制器进行编码。您编码的每个孩子都必须具有唯一的恢复标识符。

请注意,您不需要解码这些子视图控制器,因为iOS会自动为您执行此操作。

示例(在Swift中):

override func encodeRestorableStateWithCoder(coder: NSCoder) {
    // container views are encoded manually
    for (i, vc) in enumerate(childViewControllers) {
        coder.encodeObject(vc, forKey:"rootchildvc\(i)")
    }

    super.encodeRestorableStateWithCoder(coder)
}