2011-08-25 6 views
1

UIImage의 NSArray가 있습니다. UIImagePNGRepresentation을 사용하여 디스크에 저장하고 싶습니다.UIImage 배열을 UIImagePNGRepresentation 파일로 저장

응용 쇼 alertview 및 clickedButtonAtIndex 위임 방법은 내가 배경에 저장 메서드를 호출 발생했을 때 : 나는 새로운 오토 릴리즈 풀을 만드는 시려면 방법에

[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

따라서 디스크에있는 이미지 부분적으로 저장됩니다 (부분 빈 이미지를 제로 KB 이미지)

및 로그에이 메시지를 표시하여 다음 임의 카운터 값에서 루프 충돌 :

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 및 파일 이름을 해제하지 마십시오. 변수를 여러 번 릴리스하고 있습니다.