2011-10-19 11 views
0

ビューの状態を復元したいのですが、ビューにはUIPickerViewがあります。encodeObjectを使用してUIPickerViewをアーカイブすることは可能ですか?

UIPickerViewは、グラフィックスコンポーネント、つまり背景ホイールイメージを持っているように私に似ています。 UIImageはアーカイブできません。 UIImageViewのような画像を持つものは、まず画像をnilに設定してからエンコードする必要があります。

ただし、UIPickerViewNSCodingです。つまり、encodeObjectdecodeObjectが動作するはずです。

彼らはそうではありません。つまり、エラーは発生しません。しかし、デコード後には、画像なしでUIPickerViewが得られます。それは良く見えません!今

After

Before

、:ここで

はちょうど私が怒っつもりはないことを証明する前と後のショットです私はthを知っている私は単純に現在のユーザー選択を保存し、ピッカーのselectRowメソッドを呼び出すことによってビューを再作成することができました。しかし、本当に、私は興味があります。 UIPickerViewNSCodingは実際にはそうではないにもかかわらず、バックグラウンドホイールイメージを戻すために何もできないのはなぜですか?

答えて

1

あなた自身の質問に答えたようです。 UIImageViewNSCodingに準拠していますが、UIImageは保存されません(明らかに画像は別の場所に保存されているため)UIPickerViewの動作が異なると思われるのはなぜですか?

NSCodingUIViewsは、実際の表示ではなく状態(フレーム、可視性など)を保存するために使用されます。 UIViewライブラリ全体がiOSに既に入っているので、アップル側で少し矛盾していますが、それはすべてのデータを再シリアライズするのに時間を無駄にするのはなぜですか?

あなたの提案されたソリューションから得られる唯一のものは、(ビューをリセットするための)定型的なコードではなく、オブジェクトの読み書きを遅くする可能性があります。画像)

+0

私の主張は、UIPickerViewを再構築できないため、なぜNSCodingに準拠させるのですか? –

+1

ケビンはそれを説明しました。 NSCodingは*すべて*を原則としてアーカイブするのではなく、それを再構築するのに必要なデータだけをアーカイブします。 – James

+1

あなたはNSCodingがやっていることをあまりにも多く読んでいると思います。 Appleのドキュメントから:「この機能はアーカイブの基礎を提供します。あなたはそれを作ろうとしている "ワンストップショップ"だとは決して言わないでください。 – Kevin

関連する問題