AVExportSessionを使用して関連する問題がいくつか発生しています。私はこれを間違って試みている可能性があることを非常に承知していますが、役に立たないいくつかの解決策を試しました。
AVExportSessionを使用してコンポジションをエクスポートし、完了ハンドラーを使用して、完了したら他のコードをトリガーします(通常は3秒以内である必要があります)。問題は、完了時にビューを変更したいときに発生します。たとえば、モーダルビューにオーディオのエクスポートをトリガーするボタンがありますが、その後、完了時にビューを閉じたいと思います。私が受け取るエラーメッセージは非常に明白です-「これはセカンダリスレッドからUIKitを呼び出した結果である可能性があります。」
NSURL *exportURL = [NSURL fileURLWithPath:saveSong];
exportSession.outputURL = exportURL;
exportSession.outputFileType = @"com.apple.m4a-audio";
[exportSession exportAsynchronouslyWithCompletionHandler:^{
if (AVAssetExportSessionStatusCompleted == exportSession.status) {
NSLog(@"AVAssetExportSessionStatusCompleted");
[[NSNotificationCenter defaultCenter]
postNotificationName:@"end"
object:self];
} else if (AVAssetExportSessionStatusFailed == exportSession.status) {
// a failure may happen because of an event out of your control
// for example, an interruption like a phone call comming in
// make sure and handle this case appropriately
NSLog(@"AVAssetExportSessionStatusFailed");
} else {
NSLog(@"Export Session Status: %d", exportSession.status);
}
}];
私の現在の試みは、メインスレッドにジャンプしようとしてビューを閉じるためにNSNotificationを送信することを含みます。
これが不明確に見える場合は非常に申し訳ありません-解決策を見つける際に私が抱えている問題の一部は、何が間違っているのかを表現することです。説明で私の失敗した試みを投稿することによって、誰かが私に尋ねるのに正確に正しい質問をし、したがって答えへの手がかりを持っているかもしれないことを願っています!
これは、私が解決しようとしている別の問題の派生物としても発生します。エクスポートを開始すると、アニメーション化されたUIActivityViewを再表示しますが、完了時に非表示にしようとすると、UIActivityViewが最終的に非表示になるのは完了(NSLog-ed)から約20秒後です。