0

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

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

4

1 回答 1

1

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

有关详细信息,请参阅:iPhone - 为什么文档说 UIImageView 符合 NSCoding?

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

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

于 2011-09-28T21:44:09.273 回答