iPhone - なぜドキュメントはUIImageViewに準拠NSCodingされると言うのでしょうか?
-
21-08-2019 - |
質問
理想的には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に先立ってサポートしています。それは基本的にネイサンが示唆同じことを行いますが、この方法は、すでに存在するかどうかをチェックし、よりもむしろハードはそれをコーディングます。