0

我想恢复我的视图状态,我的视图有一个UIPickerView.

UIPickerView在我看来它具有图形组件,即背景轮图像。我知道UIImage不能存档。任何带有图像的东西,例如UIImageView,您必须先将图像设置为,nil然后才能对其进行编码。

但是,UIPickerViewNSCoding合规的。这意味着encodeObject并且decodeObject应该起作用。

他们没有。我的意思是,它们不会导致任何错误。但解码后,你得到的UIPickerView没有任何图像。看起来不太好!

这是之前和之后的镜头,只是为了证明我不会生气:

前

后

现在,我知道我可以简单地存储当前用户选择,并通过调用选择器的selectRow方法重新创建视图。但实际上,我很好奇。UIPickerView NSCoding如果它不是真的而且你不能做任何进一步的事情来恢复背景轮图像,为什么它是合规的?

4

1 回答 1

1

你似乎已经回答了你自己的问题。UIImageView符合NSCoding但不保存UIImage(显然因为图像保存在其他地方)所以你为什么期望UIPickerView表现不同?

从我读过的(尽管从未做过)来看NSCodingUIViews它用于保存状态(框架、可见性等)而不是实际视图。虽然 Apple 方面有点不一致,但对我来说这似乎是合乎逻辑的,因为整个 UIView 库已经在 iOS 中,为什么要浪费时间和空间重新序列化所有数据?

从您提出的解决方案中唯一可以得到的就是少一点样板代码(用于重置视图),并且有可能减慢对象的读取/写入速度(因为它必须考虑图像)

于 2011-10-26T20:19:12.043 回答