2012-09-20 8 views
15

iOS 6シミュレータでfinishWritingが壊れているようです。これは廃止され、新しいfinishWritingWithCompletionHandler:に置き換えられました。ハンドラも決して呼び出されません。iOS 6シミュレータでAVAssetWriter finishWritingが失敗する

iOS 6を実行している実際のデバイスでは、これはいつものようにうまく動作します。これまでのiOSシミュレータでもうまく動作します。 iOS 6シミュレータのバグのようです。

他にもこれが発生している人や、間違っていると思われる人はいますか?

答えて

2

[OK]をクリックして、Simulatorでの回避策を見つけました。

ストップは、映像処理スレッドをデッドロックのようなので、回避策ではなく、メインスレッドに停止を呼び出すことですルックス:私はみます

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

この回避策はfinishWritingWithCompletionHandler

のために動作するようには思えません私がAppleにバグを起こすことができるかどうかを確認してください。

+0

すでにバグを投稿しています。逆説は、iOS6以降、メインスレッドでfinishWritingを呼び出すと、ログに次のように表示されます。 警告:メインスレッドで-finishWritingを呼び出すべきではありません。 – user1574100

+0

私は同じ問題を抱えています。 iOS6シミュレータはハンドラと呼ばれず、ステータスはAVAssetWriterStatusWritingから変更されません。 –

+1

私はARCを使うために私のプロジェクトを切り替えた後にこれを始めました。 –

11

私もこの問題を抱えていましたが、私がendSessionAtSourceTime:を起動していないことを認識しました。これで私の問題は解決しました。

+1

これも私のために働いた。あなたの 'AVAssetWriter'オブジェクトで' finishWritingWithCompletionHandler: 'を呼び出すと、完了ハンドラが呼び出されるために**前の** endSessionAtSourceTime:を呼び出さなければなりません。 (ドキュメントでは、 'finishWriting'を使用しても呼び出す必要はないと述べています。これはiOS 6.0以降では廃止されています) – SolidSun

+0

私のためにも働きました。デッドロックは必ずしも発生しませんでしたが、出力ファイルは 'endSessionAtSourceTime:'呼び出しがなければ正しく書かれませんでした。 –

関連する問題