我一直试图通过序列化我的主要UITabBarController
使用来保持我的iPhone应用程序的状态[NSKeyedArchiver archiveRootObject:toFile:]
,但我遇到了困难.
首先我遇到了问题UIImage
,因为它没有实现NSCoding
协议,但我通过UIImage
为该存储创建扩展类别并检索原始图像数据来解决这个问题.
我现在坚持的问题是,当我从存档恢复时,我的视图控制器不存在.我UINavigationControllers
在每个选项卡中都有,当我还原时,UINavigationItem
s仍然存在(我可以使用Back按钮等来更改它们)但是视图控制器已经不见了.
我看到UINavigationController
的viewControllers
属性标记(nonatomic, copy)
.这是否意味着当您归档a时UINavigationController
,它不包括其视图控制器堆栈?如果是这样,我怎么能解决这个问题呢?我首先想到我会覆盖这些NSCoding
方法UINavigationController
,但这会搞砸NIB文件中的初始化.
我有点不安,因为我一直在努力保持app状态.我认为这是一个很常见的用例,它可以直接实现.我在这里错过了什么吗?
@property上的属性与归档行为几乎没有任何关系(它们只描述了getter和setter如何工作).
另外,仅仅因为UI类支持NSCoding,并不意味着它可以用于重建状态.大多数情况下,它们支持NSCoding,因此可以使用Interface Builder从NIB文件构造和加载它们.如果您考虑无法在Interface Builder中设置的所有状态位- 该类的NSCoding实现可能不支持任何数量的这些功能.
通常,人们不使用NSCoding来存储应用程序状态,因为应用程序状态的确切构成特定于您的应用程序.
保存应用程序状态通常涉及自己存储值,以便您重新创建状态.即存储所选标签的索引或表示通过导航控制器的路径的一系列所选索引.
为什么要尝试存档整个标签栏控制器?只需使用NSUserDefaults并保存选定的选项卡索引.然后,在加载应用程序时,根据保存的值选择选项卡索引.