1

私は以前に NSCoding を使用したことがなく、実装方法について非常に混乱しています。

現在の iPad アプリには、メイン ビュー コントローラーのプロパティである UIImageView (「背景」と呼ばれる) があります。「背景」には、UIImage の「画像」プロパティ (明らかに) と、ユーザーが追加したさまざまなサブビューがあります。追加されたサブビューは、UIImageView の独自のカスタム サブクラスです。

「バックグラウンド」 UIImageView の状態を保存できるようにして、アーカイブしたときと同じ画像とすべてのサブビューを元の場所に復元できるようにする必要があります。

UIImageView が NSCoding プロトコルに準拠していることは理解していますが、encodeWithCoder と initWithCoder を実装する場所がわかりません。メインのView Controllerからこれらを呼び出しますか? これらのメソッドをオーバーライドできる UIImageView のカテゴリを作成する必要がありますか?

「バックグラウンド」UIImageView とそのサブビューのすべてのプロパティをアーカイブするためのコードを記述する必要がありますか? UIImage は NSCoding に準拠していないため、UIImageView をアーカイブできるようにするには、サブクラス化するか、カテゴリを追加する必要があることを SO の他の場所で読みました。

すべてのプロパティ、サブビューなどを含むオブジェクトをディスクに保存する簡単な方法があると思いました。この「バックグラウンド」UIImageViewを保存して後で復元するには、多くのことを行う必要があるようです。やるべきことをすべて視覚化するのに苦労しています。どんなポインタでも大歓迎です!

4

1 に答える 1

4

シリアライゼーション (別名、アーカイブとアンアーカイブ) は、実際にはかなり複雑ですが、Cocoa がそれを容易にする程度は、非常に印象的な偉業です。

維持したい UIImageView とそのすべてのプロパティが準拠するように設定しNSCodingたら、オブジェクトを保存するために必要なことは次のとおりです。

NSData *dataToSave = [NSKeyedArchiver archivedDataWithRootObject:yourImageView];

そして、その NSData をどこかに保存します。次に、オブジェクトを解凍するには、

UIImageView *restoredImageView = [NSKeyedUnarchiver unarchiveObjectWithData:dataToRestore];

どこかからNSDataを回復した後。

すべてを NSCoding にUIImageView準拠させることに関しては、 に準拠してNSCodingいるのと同様に、 、そのサブビュー、およびそれらのプロパティのUIView間では、実際の を除いてすべてが準拠している可能性があります。そのために、グーグルで検索すると、人々が作成した多くのカテゴリを見つけることができるので、そのうちの1つをプロジェクトに含めるだけで問題ありません.UIImageViewNSCodingUIImageNSCoding

于 2012-02-14T18:27:34.393 に答える