这是我的代码:
-(void) recordButton{
[[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) {
NSLog(@"value of the grant is :: %hhd", granted);
if (granted)
{
// perform operation recording
// perfrom some operation on UI(changing labels and all)
}
else
{
// do operation
}
}];
}
问题是,当我第一次运行我的应用程序时,在隐私中重置并且我的应用程序调用上面定义的方法后,会产生麻烦。
当我的应用程序第一次运行时,会弹出允许/禁止麦克风乱码(操作系统定义)方法。 当我点击允许它显示布尔值(授予correclty)。正确进入IF内部。正确开始录制。但UI冻结了。并且IF的第二部分即更改标签名称,直到执行时才会执行计时器(由我添加停止方法和记录)。
提供帮助。 我可以感觉到我的第二部分IF(更改UI标签不在前台工作),即后台工作正常。请帮助,我不是专家。 2个月前启动了iOS编程。
答案 0 :(得分:9)
我得到了答案。我的问题是,当程序达到如果(授予)时, 它正在执行录制功能,但没有在UI上执行(更改标签和所有内容)。
问题是,整个代码被视为一个单独的主题,并在后台执行 。 这就是为什么录音工作正常(因为它是后台处理) 但是UI(更改标签)是一项前台任务。
所以为此,我必须在MAIN队列上的线程下执行UI CODE。现在它完美无缺。
答案 1 :(得分:2)
AVAudioSession
' requestRecordPermission
回调是一个后台主题。在后台线程中使用主线程上的代码会导致问题(很可能是崩溃)。
您应该在主线程上调用method
来执行任何帖子granted
代码。使用performSelectorOnMainThread:
是确保代码在主线程上运行的绝佳方法(如下所述:execution on main thread)。