2012-09-20 18 views
15

Es scheint, dass finishWriting auf iOS 6-Simulator gebrochen ist - es bleibt für immer hängen. Es ist jetzt veraltet und ersetzt durch den neuen finishWritingWithCompletionHandler: - der auch nie den Handler aufruft.AVAssetWriter finishWriting schlägt auf iOS 6 Simulator

Auf echten Geräten mit iOS 6 funktioniert das wie immer. Auch in früheren iOS-Simulatoren funktioniert es gut. Scheint wie ein Fehler im iOS 6 Simulator.

Wer hat das sonst noch oder kann mir das Gegenteil beweisen?

Antwort

2

Ok fand eine Arbeit auf Simulator.

Sieht aus wie Stopp der Videoverarbeitungsthread so eine Abhilfe Deadlocks Anschlag im Hauptthread statt zu nennen ist:

//  in iOS6 Simulator this blocks the video processing thread call back in UI thread. 
//  BOOL stop = [assetWriter finishWriting]; 
[self performSelectorOnMainThread:@selector(stopInOtherThread) withObject:nil]; 

-(void)stopInOtherThread{ 
    //Stop doesn't block in MainThread 
    BOOL stop = [assetWriter finishWriting]; 
    NSLog(@" assetWriter finishWriting :%d",stop); 
} 

für finishWritingWithCompletionHandler arbeiten

Ich werde diese Problemumgehung scheint nicht versuchen und sehen, ob ich einen Fehler bei Apple auslösen kann.

+0

Ich habe bereits einen Fehler gepostet. Das Paradoxe ist, dass seit iOS6, wenn wir auf dem Hauptthread finishWriting aufrufen, das Protokoll zeigt: WARNUNG: -finishWriting sollte nicht im Haupt-Thread aufgerufen werden. – user1574100

+0

Ich habe das gleiche Problem. Der iOS6-Simulator wird nicht als Handler bezeichnet und der Status ändert sich nie von AVAssetWriterStatusWriting. –

+1

Ich habe damit erst angefangen, nachdem ich mein Projekt auf ARC umgestellt habe. –

11

Ich hatte dieses Problem auch, dann erkannte ich, dass ich endSessionAtSourceTime nicht anrief: nach dem Starten eines. Das hat mein Problem gelöst.

+1

Das hat auch für mich funktioniert. Wenn Sie 'finishWithingWithCompletionHandler:' auf Ihrem 'AVAssetWriter'-Objekt aufrufen, müssen Sie ** ** vorher '' endSessionAtSourceTime: 'aufrufen, damit der Completion-Handler aufgerufen wird. (Die Dokumentation besagt, dass Sie es nicht aufrufen müssen, wenn Sie 'finishWriting' verwenden, das seit iOS 6.0 veraltet ist.) – SolidSun

+0

Arbeitete auch für mich. Der Deadlock trat nicht immer auf, aber die Ausgabedatei wurde nie korrekt geschrieben, ohne den Aufruf 'endSessionAtSourceTime:'. –

Verwandte Themen