2011-09-28 94 views
0

基本上,我的問題正如它在標題中所說的那樣。當我嘗試編碼UIViewController的子類時,調用[super encodeWithCoder]給出NSInvalidArgumentException。具體來說,我得到-[UIImage encodeWithCoder:]: unrecognized selector sent to instance XxXXXXXXUIViewController encodeWithCoder在視圖中包含帶有自定義圖像的UIButton時失敗

視圖中的唯一圖像圖像位於UIButton上,該圖像也應該符合NSCoding,並且堆棧跟蹤包括對[UIBUtton encodeWithCoder]的調用。該按鈕是使用[UIButton buttonWithType:UIButtonTypeCustom]以編程方式創建的,並且該圖像是使用setImage: forState:設置的。我真的不知道這裏發生了什麼。我是否缺少明顯的東西,還是UIButton只是不符合NSCoding

回答

1

我無法想象爲什麼你想要在你的應用程序中存檔視圖對象,但你可能需要通過在UIImage上編寫一個類別自己添加NSCoding支持。

有關詳細信息,請參閱:iPhone - Why does the documentation say UIImageView is NSCoding compliant?

查看對象支持NSCoding因爲視圖裝載系統使用它來從筆尖文件加載的對象。但是UINib類做了一些額外的工作,NSKeyedArchiver沒有。

如果您只是想在啓動之間存儲狀態,最好存儲數據而不是查看狀態。特別是如果您打算更新您的應用並對視圖佈局進行任何更改。 (這是模型/視圖/控制器分離的動機)。

+0

所以基本上,符合NSCoding並不實際意味着Apple所說的含義。感謝您的鏈接,我搜索了但我沒有遇到過。 –

+1

這意味着它說什麼,它只是沒有說出你的想法。例如,一個NSCoding類可能支持密鑰存檔,或經典存檔,或兩者都支持,或者都不支持。沒有保證。 – benzado

相關問題