iPhone - なぜドキュメントはUIImageViewに準拠NSCodingされると言うのでしょうか?

StackOverflow https://stackoverflow.com/questions/1072700

  •  21-08-2019
  •  | 
  •  

質問

NSCodingに準拠したクラスの私の考えがある場合を除き、開発者がルーチン(内部で何が起こっについて気にすることなく、(少なくとも私は最近までそう思った):とinitWithCoder:予想通り

理想的にはNSCodingに準拠したクラスは、encodeWithCoderを使用して動作します完全に台無し!)

UIImageViewクラスに準拠NSCodingされます。だから私はそれがNSKeyedArchiverとNSKeyedUnarchiverクラスを使用して、シリアライズ/デシリアライズされるか気にする必要はありません。しかし、私は試してみて、UIImageViewオブジェクトをエンコードするたびに、私は、UIImageがencodeWithCoder認識していないというエラーを取得:メソッドを

今UIImageViewは、内部UIImageオブジェクトを使用しています。しかし、エンコーディングは、自分自身の世話をしているべきではないのですか?

それとも、ユーザーが、彼らはinitWithCoderとencodeWithCoderメソッドを実装することができることを知っているようにマニュアルで指定NSCodingのコンプライアンスのですか?

誰かが私のためにこれを明確にしてくださいすることができます!私は徹底的に混乱しています!

役に立ちましたか?

解決

ドキュメントは誤解を招く - UIImageはあなたが述べてきたようにNSCodingに準拠していません。あなたが自分で仕事をしていることにより、(原始的な方法で)それを回避することができます:

@interface UIImage (NSCoding)
- (id)initWithCoder:(NSCoder *)decoder;
- (void)encodeWithCoder:(NSCoder *)encoder;
@end

@implementation UIImage (NSCoding)
- (id)initWithCoder:(NSCoder *)decoder {
  NSData *pngData = [decoder decodeObjectForKey:@"PNGRepresentation"];
  [self autorelease];
  self = [[UIImage alloc] initWithData:pngData];
  return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
  [encoder encodeObject:UIImagePNGRepresentation(self) forKey:@"PNGRepresentation"];
}
@end

他のヒント

この質問はUIImageにNSCoding用のiOS 5.1追加機能、およびネイサン・デ・フリースの答えは今、最新のコンパイラで警告の原因となりますので、アップデートに値するます。

この質問は、あなたのアプリならば問題を回避するためにのソリューションを提供していますiOSが5.1に先立ってサポートしています。それは基本的にネイサンが示唆同じことを行いますが、この方法は、すでに存在するかどうかをチェックし、よりもむしろハードはそれをコーディングます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top