2011-10-31 2 views
1

일부 이미지를 카메라 롤에 저장하려고하면 모든 이미지가 배열로 표시됩니다. 내가 8 개 이미지 while 루프를카메라 롤에 여러 개의 이미지 저장, 몇 개만 저장 됨

임 테스트 이것을 사용이있을 수 있습니다 얼마나 많은 이미지를 잘 모릅니다 때문에

if (buttonIndex == 1) { 
    int done = 0; 
    NSMutableArray *copyOfImages = [[NSMutableArray alloc]initWithArray:saveImagesToArray]; 
    while (!done == 1){ 

     if (copyOfImages.count == 0) { 
      done = 1; 
     } 
     if (copyOfImages.count > 0){ 
      [copyOfImages removeLastObject]; 
     } 

    UIImage *image = [[UIImage alloc]init]; 
    image = [copyOfImages lastObject]; 
    UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); 

    } 

} 

는, 배열 8의 수가 너무 좋아 이잖아 보여줍니다.

이미지 저장을 시도하면 콘솔에 표시됩니다.

-[NSKeyedUnarchiver initForReadingWithData:]: data is NULL 

8 개의 이미지 중에서 카메라 롤에 5 개만 표시됩니다.

도움이 될 것입니다. 감사합니다 :)

답변

1

[copyOfImages removeLastObject]에게 전화하시는 이유는 무엇입니까? 당신이 그 모양을 통과 할 때마다 당신은 마지막 물건을 망가 뜨리고 있습니다. 당신은 아직 그것을 롤에 추가하지 않았기 때문에 이상합니다. 그 라인을 꺼내서 작품을 본다.

for (id object in array) { 
    // do something with object 
} 

이 그 단부에 도달 할 때 중지 배열 객체 비록 열거한다 :

도 아닌 루프를 사용하는 대신, 다음의 패턴을 사용한다. 이 작업을 수행하는 동안 배열을 수정하지 않도록하십시오.

+0

, 만 5 이미지가 나타났다 :

내가 문제가 실제있는 UIImage가 아닌 URL을 보낼 것을 발견했다 나는 카메라 롤에 이미지를 쓰고 완전히 잘 작동 한 후에'sleep (1);을 추가하기로했다.for 루프는 아마도 더 잘 작동하지만. 감사! : D – Jacob

1

나는이 똑같은 문제가있어서 이미지가 순차적으로 저장되도록하여 해결했습니다. 무슨 일이 벌어 질지도 모릅니다.

기본적으로, 내가 그랬어 : 어떤 왼쪽이있는 경우

UIImageWriteToSavedPhotosAlbum([self.images objectAtIndex:self.currentIndex], self, 
    @selector(image:didFinishSavingWithError:contextInfo:), nil); 

그런 다음 image:didFinishSavingWithError:contextInfo:에, 나는 currentIndex을 증가시키고 다음 이미지를보십시오.

이것은 지금까지 모든 경우에 저에게 효과적이었습니다.

0

Bill의 대답을 확장하면 UIImageWriteToSavedPhotosAlbum은 알 수없는 스레드를 비동기 적으로 쓰는 것처럼 보입니다. 그러나 한 번에 쓸 수있는 이미지 수에 대한 숨겨진 제한이 있습니다. 깊은 곳에서 파고 들면 write busy 유형 오류를 알 수 있습니다. 여기

톤 대한 추가 정보 :

Objective-C: UIImageWriteToSavedPhotosAlbum() + asynchronous = problems

나는 또한 당신의 쓰기를 직렬화하는 것은 내가 본 유일한 합리적인/신뢰할 수있는 답변을 것을 빌에 동의합니다.

1

나는 똑같은 문제가있었습니다. 공유 activityController에 추가 한 사진의 수와 상관없이 최대 5 개가 저장되었습니다. 그래서,

NSMutableArray *activityItems = [[NSMutableArray alloc] init]; 

for(UIImage *image in imagesArray) { 
    [activityItems addObject:image]; 
} 

UIActivityViewController *activityController = [[UIActivityViewController alloc] initWithActivityItems:activityItems applicationActivities:nil]; 
난, 여전히 같은 콘솔 출력 변경 나타났다 만든 좋아
+0

여기와 같습니다. 최대 5 명이 저장되었습니다. –

관련 문제