2012-09-20 7 views
15

Wygląda na to, że finishWriting jest uszkodzony na symulatorze iOS 6 - wisi na zawsze. Został on teraz przestarzały i zastąpiony nowym parametrem finishWritingWithCompletionHandler: - który również nigdy nie wywołuje procedury obsługi.Zakończenie AVAssetWriter kończy się niepowodzeniem na symulatorze iOS 6

Na prawdziwych urządzeniach z systemem iOS 6 wszystko działa tak jak zawsze. Również w poprzednich symulacjach iOS działa dobrze. Wygląda jak błąd w symulatorze iOS 6.

Ktoś, kto tego doświadcza, czy może mnie udowodnić?

Odpowiedz

2

Ok znalazłem pracę na symulatorze.

Wygląda przystanek zakleszczenia wątek przetwarzania wideo tak obejście jest wywołanie przystanek w głównym wątku Zamiast:

//  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); 
} 

To rozwiązanie nie wydaje się pracować dla finishWritingWithCompletionHandler

Postaram i zobacz, czy mogę zgłosić błąd na Apple.

+0

Już opublikowałem błąd. Paradoks polega na tym, że od kiedy iOS6, jeśli wywołujemy metodę finishWriting w głównym wątku, dziennik pokazuje: OSTRZEŻENIE: -finishWriting nie powinien być wywoływany w głównym wątku. – user1574100

+0

Mam ten sam problem. Symulator iOS6 nie jest nazywany programem obsługi, a jego status nigdy się nie zmienia. AVAssetWriterStatusWriting. –

+1

Zacząłem to robić dopiero po przełączeniu mojego projektu na ARC. –

11

Miałem również ten problem, a następnie zdałem sobie sprawę, że nie wzywam endSessionAtSourceTime: po uruchomieniu. To rozwiązało mój problem.

+1

To działało również dla mnie. Jeśli wywołasz polecenie "finishWritingWithCompletionHandler:' na twoim obiekcie 'AVAssetWriter', to ** musisz wywołać **' endSessionAtSourceTime: 'przed tym, aby wywołać procedurę zakończenia. (Dokumentacja stwierdza, że ​​nie musisz go wywoływać, jeśli używasz funkcji "finishWriting", która jest przestarzała od iOS 6.0.) – SolidSun

+0

Dla mnie też. Zakleszczenie nie zawsze miało miejsce, ale plik wyjściowy nigdy nie został poprawnie napisany bez wywołania 'endSessionAtSourceTime:'. –

Powiązane problemy