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
    }

   }];

}

問題は、アプリを初めて実行するときに、プライバシーをリセットした後、アプリが上記で定義されたメソッドを呼び出すと、問題が発生することです。

アプリを初めて実行すると、マイクを許可/禁止するメッセージ (OS 定義) メソッドがポップアップします。許可をクリックすると、ブール値が表示されます(許可された正しい)。IF に正しく入ります。正しく記録を開始します。しかし、UI がフリーズします。IF の 2 番目の部分、つまり、ラベル名の変更は、タイマー (私が追加したメソッドと記録を停止する) が実行されるまで実行されません。

助けてください。IF の 2 番目の部分 (UI ラベルの変更がフォアグラウンドで機能していない)、つまりバックグラウンド作業が完全に機能していることがわかります。助けてください、私は専門家ではありません。2 か月前に iOS プログラミングを開始しました。

4

2 に答える 2

2

AVAudioSessionrequestRecordPermissionコールバックはバックグラウンド スレッドです。バックグラウンドスレッド内のメイン スレッドでコードを使用すると、問題が発生します (そしてほとんどの場合、クラッシュします)。

ポストコードmethodを実行するには、メイン スレッドでa を呼び出す必要があります。grantedを使用することは、コードがメイン スレッドperformSelectorOnMainThread:で実行されていることを確認するための優れた方法です(ここで説明されているように:メイン スレッドでの実行)。

于 2015-08-22T18:06:11.590 に答える