그래서 QTMovie 개체를 가변 크기 (몇 MB에서 1GB 이상까지) 가변 크기로 가져오고 writeToFile:withAttributes:
을 사용하여 디스크로 내 보냅니다. 이 작업은 오랜 시간이 걸리고 UI를 잠급니다. Grand Central Dispatch를 사용하여 다른 스레드에 넣기로했습니다.QTMovie에서 내 UI의 작동을 멈추게 할 수 있습니까?
내가 말할 수있는 한, writeToFile:withAttributes:
을 사용하는 경우를 제외하고는 응용 프로그램을 여전히 잠그고 있다는 것을 제외하고는 완벽하게 작동합니다. 파일을 내 보내지 만 완료 될 때까지는 UI로 아무 것도 할 수 없습니다.
QTKit 및 Google의 다양한 장소에서 여러 개의 스레드를 사용하여 모든 문서를 살펴 봤지만 사용해 본 것이 없습니다.
다음
는 문제를 갖는 것으로 보인다 코드입니다 :[movie detachFromCurrentThread];
dispatch_queue_t combineQueue = dispatch_queue_create("com.Combinate.movieCombineQueue", NULL);
dispatch_async(combineQueue, ^{
[QTMovie enterQTKitOnThreadDisablingThreadSafetyProtection];
[movie attachToCurrentThread];
[movie writeToFile:filepath withAttributes:exportAttributes];
[movie detachFromCurrentThread];
[QTMovie exitQTKitOnThread];
dispatch_async(dispatch_get_main_queue(), ^{
[movie attachToCurrentThread];
[self finishedCombiningAudioFiles:(QTMovie *)movie];
});
});
dispatch_release(combineQueue);
도움 주셔서 감사합니다. 이것은 실제로 올바른 방향으로 나를 가리켰다. 분명히, '- (Movie) quickTimeMovie' 메소드는 64 비트 애플리케이션에서는 사용할 수 없으며 32 비트 애플리케이션에서만 사용할 수 있습니다. 나는 (BOOL) detachFromCurrentThread'가 실제로 그것의 구현에서'DetachMovieFromCurrentThread'를 사용하고 있는데 왜 실패 하는지를 설명 할 것이라고 생각합니다. 작동 시키려면 64 비트가 아닌 32 비트로 컴파일되도록 앱을 변환해야했습니다. 거의 이상적이지만 적어도 작동합니다. – jcocoa5