12

理想的には、NSCoding 準拠のクラスは、encodeWithCoder: と initWithCoder: を使用して期待どおりに動作します (少なくとも最近までそう思っていました) 開発者がルーチン内で何が起こっているかを気にする必要はありません (NSCoding 準拠のクラスに関する私の考えが完全に台無しにされない限り) !)

UIImageView クラスは NSCoding に準拠しています。したがって、NSKeyedArchiver および NSKeyedUnarchiver クラスを使用してシリアル化/逆シリアル化する方法を気にする必要はありません。しかし、UIImageView オブジェクトをエンコードしようとするたびに、UIImage が encodeWithCoder: メソッドを認識しないというエラーが発生します。

現在、UIImageView は内部的に UIImage オブジェクトを使用しています。しかし、エンコーディング自体がそれを処理するべきではなかったのでしょうか?

それとも、initWithCoder および encodeWithCoder メソッドを実装できることをユーザーに知らせるために、ドキュメントで NSCoding 準拠が指定されていますか?

誰かが私のためにこれを明確にしてもらえますか! 私は完全に混乱しています!

4

2 に答える 2

8

この質問は、iOS 5.1 で NSCoding の機能が UIImage に追加されたため、更新する必要があり、Nathan de Vries の回答により、最新のコンパイラで警告が発生するようになりました。

この質問は、アプリが 5.1 より前の iOS をサポートしている場合に問題を回避するための解決策を提供します。基本的に Nathan が提案するのと同じことを行いますが、メソッドをハードコーディングするのではなく、メソッドが既に存在するかどうかをチェックします。

于 2012-06-14T20:53:48.150 に答える