我使用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,但是当试图隐藏完成时,它在完成后大约20秒(NSLog-ed),UIActivityView最终隐藏
答案 0 :(得分:0)
解决方案:使用[self performSelectorOnMainThread:@selector(stopActivityIndicator)withObject:nil waitUntilDone:YES];
然后从 - (void)stopActivityIndicator
调用我的视图更改/活动指示符