4

这是我的代码:

-(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
    }

   }];

}

问题是,当我第一次运行我的应用程序时,在隐私中重置并且我的应用程序调用上述定义的方法后,它会产生麻烦。

当我的应用程序第一次运行时,弹出允许/禁止麦克风messgae(操作系统定义)方法。当我单击允许时,它显示布尔值(授予正确性)。正确进入 IF 内部。正确开始录制。但用户界面冻结。和 IF 的第二部分,即更改标签名称,直到执行一个计时器(我添加的停止方法和记录)才执行。

请帮忙。我可以感觉到我的 IF 的第二部分(更改 UI 标签不在前台工作),即后台工作正常工作。请帮忙,我不是专家。2 个月前开始 iOS 编程。

4

2 回答 2

9

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

问题是,整个代码被视为一个单独的线程在后台执行。这就是录制工作正常的原因(因为它是一个后台进程)
但是 UI(更改标签)是一项前台任务

因此,为此,我必须在 MAIN queue 上的线程下执行 UI CODE。现在它完美地工作了。

于 2013-11-22T08:46:11.627 回答
2

AVAudioSessionrequestRecordPermission回调是一个后台线程在后台线程内的主线程上使用代码会导致问题(并且很可能会导致崩溃)。

您应该method在主线程上调用 a 来执行任何后置granted代码。UsingperformSelectorOnMainThread:是确保您的代码在主线程上运行的一种极好的方法(如此处所述:在主线程上执行)。

于 2015-08-22T18:06:11.590 回答