업데이트 :이 문제는 또한 원인에 대한 자세한 치료, 여기에보고했다 : 내 경우목표 - C : UIImageWriteToSavedPhotosAlbum() + 비동기 = 문제
UIImageWriteToSavedPhotosAlbum saves only 5 image out of 10. Why?
뿐만 아니라의 오류 : "쓰기 사용 중"-이 문제는 장치 속도와 관련이있는 것으로 보입니다. 아마도 수동으로 스레딩이나 이와 유사한 방법을 다루는 몇 가지 해결책이있을 수 있습니다.하지만 아래의 Tommy의 답변에서 영감을 얻어 이미지 저장을 연재했습니다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
상황 :
for-loop를 사용하여 이미지의 큰 컬렉션을 카메라 롤에 저장하려고합니다 (이미지 수는 사용자 입력에 따라 다르며 1, 2, 3 또는 이론적으로 수백 일 수 있음). 이미지는 NSSet
으로 지정되며 for 루프가 완료된 후에 NSSet
은 nil
으로 설정됩니다 (다만 NSArray
을 쉽게 수행 할 수 있음). 나는 분리 된 스레드에서 이미지를 저장 UIImageWriteToSavedPhotosAlbum()
을 사용하고
은 (NSThread
의 detachNewThreadSelector:toTarget:withObject:
클래스 메소드를 사용하여), 메인 스레드에서 UIActivityIndicator
회를 시작.
문제 :
내가 ~ 5 ~ 5가 출력 로그에서이 오류가 발생한 후 모든 이미지보다 더 밖으로 저장하려고 : 예를 들어
*** -[NSKeyedUnarchiver initForReadingWithData:]: data is NULL
이하자를의 9 개의 이미지를 내보냈다 고합니다. for-loop는 NSLogging에 의해 확인 된 9 개의 이미지를 모두 통과하지만 위의 오류를 약 4 회 반복하고 카메라 롤에 5 개의 이미지 만 저장합니다.
루프에 중단 점을 추가하고 각 반복 사이에 두 번째 또는 두 번 대기하면 불만없이 올바르게 저장됩니다. 그래서 ..
이론 : 내 기록과 관찰을 바탕으로이
, UIImageWriteToSavedPhotosAlbum()
명확하게 비동기 적으로 실행하고 내 응용 프로그램과 함께 계속 어떻게 든 '너무 느리다'이다.
동 기적으로 (주 스레드에서 이상적으로) 실행되도록하는 간단한 방법이 있습니까? 내가 저장하려고하는 이미지에 참조 횟수를 추가하는 실험을 해봤지만 (1) 해커가 느껴진다. (2) 관계없이 문제를 해결하지 못했다.
조언이 도움이 될 것입니다. 감사!
메인 스레드 잠금이 의미 활동 표시하지 않습니다 생명 있는. 앱이 멈춘 것처럼 보입니다. – danielbeard
예, 'UIImageWriteToSavedPhotosAlbum'은 (는) 비동기 적으로 실행됩니다. 오류 로그는 저장하려는 이미지가 Null 인 것처럼 들립니다. 이미지 데이터를 확인하십시오. – fannheyward
@danielbeard - 네, 맞습니다, 죄송합니다 - ** 상황 ** – toblerpwn