基本上,我的问题正如它在标题中所说的那样。当我尝试编码UIViewController
的子类时,调用[super encodeWithCoder]
会给出NSInvalidArgumentException
。具体来说,我得到-[UIImage encodeWithCoder:]: unrecognized selector sent to instance XxXXXXXX
。
视图中唯一的图像图像位于UIButton
上,也应该符合NSCoding,堆栈跟踪包括对[UIBUtton encodeWithCoder]
的调用。该按钮以[UIButton buttonWithType:UIButtonTypeCustom]
编程方式创建,图像设置为setImage: forState:
。我真的不知道这里发生了什么。我错过了一些明显的东西,或者UIButton
是否真的不符合NSCoding
?
答案 0 :(得分:1)
我无法想象您为什么要在应用程序中存档视图对象,但您可能需要通过在UIImage上编写类别来自己添加NSCoding支持。
有关详细信息,请参阅:iPhone - Why does the documentation say UIImageView is NSCoding compliant?
View对象支持NSCoding,因为视图加载系统使用它来从Nib文件加载对象。但是UINib类还做了一些NSKeyedArchiver没有的额外工作。
如果您只想在启动之间存储状态,最好存储数据而不是查看状态。特别是如果您计划更新应用程序并对视图布局进行任何更改。 (这是模型/视图/控制器分离背后的动机。)