2011-08-25 10 views
1

私はUIImageのNSArrayを持っています。 UIImagePNGRepresentationを使ってディスクに保存したいと思います。UIImage配列をUIImagePNGRepresentationファイルに保存します。

アプリショーalertviewとclickedButtonAtIndexのデリゲートメソッドは、私が法セーブバックグラウンドで呼び出して行われます。私は新しい自動解放プールを作成し、この作業を行うSAVEALL方法で

[self performSelectorInBackground:@selector(saveAll) withObject:nil]; 

を:

NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
NSString* filename = nil; 
int count = [self.imageArray count]; 
UIImage* image = nil; 
NSData* data = nil; 
NSData* imageData = nil; 

for (int i = 0 ; i < count;) 
{ 
    image = [self.imageArray objectAtIndex:i]; 
filename = [[NSString alloc] initWithFormat:@"/saved/%@%d.png",@"aString",i++]; 

    NSString* completeFilePath = [FileAndBundle getFileDocumentsPath:filename ofType:nil]; 
    NSLog(@"%d before image saved",i); 
    data = [[NSData alloc] initWithData: UIImagePNGRepresentation(image)]; 
    NSLog(@"%d middle image saved",i); 
    imageData= [[NSData alloc] initWithData:[NSData dataWithData:data]]; 
    NSLog(@"%d after image saved",i); 

    [imageData writeToFile:completeFilePath atomically:NO]; 

    image = nil; 
    [data release]; 
    data = nil; 
    [imageData release]; 
    imageData = nil; 
    [filename release]; 
    filename = nil; 

} 
[pool release]; 

問題: 初めて12個のUIImagesを保存すると、すべてがディスクに正しく保存されます。 私は12 UIImagesで再びドキュメントを開いて、forループで同じ方法 を使用して、それを再保存すると、私は次のエラーを取得:

ImageIO: PNGNot enough image data

だからディスク内の画像の一部が保存されます(一部の空白画像をまたはログにこのメッセージが示すことによって、ゼロキロバイト画像)

、その後ランダムカウンタ値でループのクラッシュ:

malloc: *** error for object 0x6927804: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug

を誰もが問題を見つけることに私を助けることができます!ありがとう!

+0

問題は、異なるファイル名を使用することによって解決されるようです。 pngファイルがディスクに存在し、質問のメソッドを使用して上書きしようとすると、同じソースにアクセスして書き込む際にエラーが発生する可能性があります(私はUIImageがディスクからもデータを取得すると仮定します)) だから、別の名前でpngを保存し、元の名前に移動してください。 – Giuseppe

答えて

0

forループでデータ、imageDataおよびファイル名を解放しません。変数を複数回リリースしています。

関連する問題