我想恢复我的视图状态,我的视图有UIPickerView
。
UIPickerView
看起来像它有图形组件,即背景轮图像。我知道UIImage
无法归档。任何包含图像的内容,例如UIImageView
,您必须先将图像设置为nil
,然后才能对其进行编码。
但是,UIPickerView
是NSCoding
兼容。这意味着encodeObject
和decodeObject
应该有效。
他们不是。我的意思是,它们不会导致任何错误。但解码后,您将获得UIPickerView
没有任何图像。它看起来不太好看!
这是一个前后镜头,只是为了证明我不会生气:
之前
后
现在,我知道我可以简单地存储当前用户选择,并通过调用选择器的selectRow
方法重新创建视图。但实际上,我很好奇。为什么UIPickerView
NSCoding
是否合规,如果它不是真的,你不能做任何进一步的事情来获得背景轮图像?
答案 0 :(得分:1)
你似乎回答了自己的问题。 UIImageView
符合NSCoding
但尚未保存UIImage
(很明显,因为图片已保存在其他地方),为什么您希望UIPickerView
的行为有所不同?
从我读过的内容(虽然从未完成)NSCoding
UIViews
用于保存状态(框架,可见性等),而不是实际视图。虽然Apple有点不一致,但对我来说这似乎是合乎逻辑的,因为整个UIView库已经在iOS中了,为什么要浪费时间和时间。空间重新整理所有数据?
从您提出的解决方案中唯一可以获得的是样板代码(用于重置视图)并且有可能减慢对象的读/写速度(因为它必须考虑图像) )