【发布时间】:2021-01-29 23:42:04
【问题描述】:
我对 IOS 开发还很陌生,遇到了一些问题。
假设:当我使用情节提要并在其中创建视图时,情节提要通过 init(frame: CGRect) 创建一个视图,然后将其序列化并创建一些包含此信息的文件。当应用程序在设备上启动时,它使用此序列化数据通过 init(coder: NSCoder) 创建对象
我的假设是正确的还是我遗漏了什么?
【问题讨论】:
标签: ios swift storyboard
我对 IOS 开发还很陌生,遇到了一些问题。
假设:当我使用情节提要并在其中创建视图时,情节提要通过 init(frame: CGRect) 创建一个视图,然后将其序列化并创建一些包含此信息的文件。当应用程序在设备上启动时,它使用此序列化数据通过 init(coder: NSCoder) 创建对象
我的假设是正确的还是我遗漏了什么?
【问题讨论】:
标签: ios swift storyboard
是的,你的假设是正确的。几乎。在编译期间,Xcode 将为情节提要中的每个“视图控制器场景”创建一个.nib 文件。 .nib 文件的名称可以通过“object id”属性查看。然后将 nib 文件与您的应用程序包一起部署。
.nib 文件包含 - 除其他外 - 序列化的 UIView 层次结构,它将在运行时由 init(coder:) 初始化程序反序列化。
顺便说一句,当使用.xib 文件时,Xcode 将为每个.xib 文件创建一个.nib 文件。
【讨论】:
encodeRestorableState(with coder: NSCoder) 但我认为这有点不同其他参考encodeWithCoder(coder: NSCoder)
encodeRestorableState 用于应用程序状态恢复,因此您不保存视图,而是保存视图的状态(数据、编辑模式、光标位置、当前导航层次结构等)