2011-08-02 14 views
1

をデコードし、私はコンタクトの配列は、このエンコード/ UIImage

[NSKeyedArchiver archiveRootObject:listOfContactsToLay toFile:[self fPath]]; 

Contactクラスのようにファイルにオブジェクトを対応するプロトコル、 を実装して書くが、それはUIImageのフィールドを持っており、それがエンコードを投げるつもりエンコードやデコードではありません例外。 UIImageフィールドはどうすればいいですか?

+2

うーん...連絡先?あなたはその変数の名前を変更したいかもしれません。それはむしろ...推測的です。 –

答えて

3

ショートソリューション

- (id)initWithCoder:(NSCoder *)decoder 
{ 
    if ((self = [super init])) 
    { 
     NSData *data = [decoder decodeObjectForKey:@"UIImage"]; 
     self = [self initWithData:data]; 
    } 

    return self; 
} 
- (void)encodeWithCoder:(NSCoder *)encoder 
{ 
    NSData *data = UIImagePNGRepresentation(self); 
    [encoder encodeObject:data forKey:@"UIImage"]; 
} 
@end 

ソース:築くためにhttp://iphonedevelopment.blogspot.com/2009/03/uiimage-and-nscoding.html

2

UIImagePNGRepresentationおよびUIImageJPEGRepresentationの機能を使用して、画像データのPNGまたはJPEG表現を含むNSDataオブジェクトを取得できます。

0

UIImageはencodeWithCoderに準拠していないため、毎回例外がスローされます。イメージをユーザーのデフォルトに直接保存することもできますが、ドキュメントディレクトリにイメージを保存し、イメージファイルのパスを保存することをお勧めします。イメージがあらかじめレンダリングされている場合は、明らかに非常に簡単です。彼らはオンザフライで生成されている場合(たとえば画像コンテキスト、などのように)、あなたがたNSDataにそれらをキャストすることができます:

NSData *imageData = UIImageJPEGRepresentation(myImage, CGFloat compressionQuality); 
[imageData writeToFile:pathYouCreate atomically:YES]; 

は、その後、あなたのNSKeyedArchiverでプロパティとしてパスを保存します。

+0

エンコードする前に画像からNSDataを取得します。ここにはエラーや例外はありません!私はこの方法を私のアプリで使いこなしています! – oberthelot