2011-10-19 22 views
0

我想恢復我的視圖狀態,並且我的視圖有一個UIPickerView是否有可能使用encodeObject存檔UIPickerView?

UIPickerView在我看來,像它有圖形組件,即背景輪圖像。我知道UIImage無法歸檔。任何與圖像有關的東西,如UIImageView,您必須先將圖像設置爲nil,然後才能對其進行編碼。

但是,UIPickerViewNSCoding兼容。這意味着encodeObjectdecodeObject應該可以工作。

他們沒有。我的意思是,他們不會造成任何錯誤。但解碼後,你會得到沒有任何圖像的UIPickerView。它看起來不太好!

之前和拍攝後只是爲了證明我不是要瘋了這裏是:

以前

Before

After

現在,我知道我可以簡單地存儲當前的用戶選擇,並通過調用選擇器的方法來重新創建視圖。但真的,我很好奇。爲什麼UIPickerViewNSCoding如果不是真的,並且你無法做進一步的操作來獲取背景輪圖像?

回答

1

您似乎已經回答了您自己的問題。 UIImageView符合NSCoding但不保存UIImage(顯然,因爲圖像保存在其他地方),那麼爲什麼你會期望UIPickerView行爲有任何不同?

從我讀過的(雖然從未做過)NSCoding on UIViews用於保存狀態(幀,可視性等)而不是實際視圖。雖然蘋果方面有點不一致,但對我來說這似乎合乎邏輯,因爲整個UIView庫已經在iOS中,爲什麼要浪費時間&空間重新序列化所有的數據?

從您提出的解決方案中可以獲得的唯一一件事就是少一些樣板代碼(用於重置視圖)並且可能會降低對象的讀/寫速度(因爲它必須考慮到圖像)

+0

我的觀點是,你不能重建一個UIPickerView,那麼爲什麼讓它NSCoding兼容? –

+1

凱文解釋它。作爲一個規則,NSCoding不會將所有內容都歸檔,只是重建它所需的數據。 – James

+1

我認爲你正在閱讀NSCoding應該做的事情。從Apple的文檔中可以看出:「這種功能爲歸檔提供了基礎。」永遠不會說這是你試圖做到的「一站式商店」。 – Kevin