我在使用 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 秒