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