AVAudioSession sharedInstance requestRecordPermission:^(BOOL已授予)

时间:2013-11-11 08:22:55

标签: iphone objective-c avaudiorecorder

这是我的代码:

-(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编程。

2 个答案:

答案 0 :(得分:9)

我得到了答案。我的问题是,当程序达到如果(授予)时, 它正在执行录制功能,但没有在UI上执行(更改标签和所有内容)。

问题是,整个代码被视为一个单独的主题,并在后台执行 。 这就是为什么录音工作正常(因为它是后台处理) 但是UI(更改标签)是一项前台任务

所以为此,我必须在MAIN队列上的线程下执行UI CODE。现在它完美无缺。

答案 1 :(得分:2)

AVAudioSession' requestRecordPermission回调是一个后台主题。在后台线程中使用主线程上的代码会导致问题(很可能是崩溃)。

您应该在主线程上调用method来执行任何帖子granted代码。使用performSelectorOnMainThread:是确保代码在主线程上运行的绝佳方法(如下所述:execution on main thread)。