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
사람이 문제를 찾는 데 좀 도와 줄래?! 감사!
문제는 다른 파일 이름을 사용하여 해결되는 것 같습니다. png 파일이 디스크에있는 경우 질문의 메서드를 사용하여 덮어 쓰려고하면 동일한 소스에 액세스하고 쓰는 데 오류가 발생할 수 있습니다. UIImage가 디스크에서도 데이터를 가져 오는 것으로 가정합니다.) 따라서 다른 이름으로 png를 저장 한 다음 원래 이름으로 이동하십시오. – Giuseppe