Сохранить массив UIImage в файл с помощью UIImagePNGRepresentation - PullRequest
1 голос
/ 25 августа 2011

У меня есть 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

Может кто-нибудь помочь мне найти проблему ?!Спасибо!

1 Ответ

0 голосов
/ 31 октября 2011

Не выпускать данные, imageData и имя файла для цикла for. вы выпускаете переменные несколько раз.

...