当视图包含带有自定义图像的UIButton时,UIViewController encodeWithCoder失败

时间:2011-09-28 21:26:24

标签: iphone ios ipad uibutton nscoding

基本上,我的问题正如它在标题中所说的那样。当我尝试编码UIViewController的子类时,调用[super encodeWithCoder]会给出NSInvalidArgumentException。具体来说,我得到-[UIImage encodeWithCoder:]: unrecognized selector sent to instance XxXXXXXX

视图中唯一的图像图像位于UIButton上,也应该符合NSCoding,堆栈跟踪包括对[UIBUtton encodeWithCoder]的调用。该按钮以[UIButton buttonWithType:UIButtonTypeCustom]编程方式创建,图像设置为setImage: forState:。我真的不知道这里发生了什么。我错过了一些明显的东西,或者UIButton是否真的不符合NSCoding

1 个答案:

答案 0 :(得分:1)

我无法想象您为什么要在应用程序中存档视图对象,但您可能需要通过在UIImage上编写类别来自己添加NSCoding支持。

有关详细信息,请参阅:iPhone - Why does the documentation say UIImageView is NSCoding compliant?

View对象支持NSCoding,因为视图加载系统使用它来从Nib文件加载对象。但是UINib类还做了一些NSKeyedArchiver没有的额外工作。

如果您只想在启动之间存储状态,最好存储数据而不是查看状态。特别是如果您计划更新应用程序并对视图布局进行任何更改。 (这是模型/视图/控制器分离背后的动机。)