У меня есть NSArray of UIImage.Я хочу сохранить его на диск, используя UIImagePNGRepresentation.
Приложение показывает alertview, и когда происходит нажатие метода делегата clickedButtonAtIndex, я вызываю в фоновом режиме метод save:
[self performSelectorInBackground:@selector(saveAll) withObject:nil];
в методе saveAll, который я делаюНовый пул авто-релизов и выполните эту работу:
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: PNGНе достаточно данных изображения
Таким образом, изображение на диске частично сохраняется (частично пустое изображение или изображение нулевого килобайта)
, а затем при случайном значении счетчика происходит сбой цикла, показывая это сообщение в журнале:
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
Может кто-нибудь помочь мне найти проблему ?!Спасибо!