2 Stimmen

Wie kann ich verhindern, dass QTMovie die Benutzeroberfläche meiner Anwendung einfriert?

Ich versuche also, ein QTMovie-Objekt mit variabler Größe (von einigen MBs bis zu mehr als einem GB) zu nehmen und mit writeToFile:withAttributes: um sie auf die Festplatte zu exportieren. Da dies sehr lange dauert und die Benutzeroberfläche blockiert, habe ich beschlossen, dies mit Grand Central Dispatch auf einen anderen Thread zu legen.

Soweit ich das beurteilen kann, funktioniert dies einwandfrei, außer bei der Verwendung von writeToFile:withAttributes: sperrt die App immer noch. Die Datei wird zwar exportiert, aber Sie können nichts mit der Benutzeroberfläche tun, bis der Vorgang abgeschlossen ist.

Ich habe durch alle Dokumente über die Verwendung von mehreren Threads mit QTKit, und verschiedene Orte auf Google, aber nichts, was ich versucht habe scheint zu funktionieren.

Nachfolgend finden Sie den Code, der das Problem zu verursachen scheint:

[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);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X