Apple の SpeakHere オーディオ アプリケーションの例に基づいて、iPad で使用する小さなオーディオ レコーダー/プレーヤーを作成します。ユーザーがレコーダーの表示を要求すると、UIView が開き、録音/停止ボタンとメーターが表示されます。
アプリケーションを最初からロードすると、いつでも記録、記録の停止、再記録を行うことができます。記録を停止した後、たとえばメールを読むために、アプリケーションをバックグラウンドに置きました。オーディオ レコーダーを再びフォアグラウンドにすると、音声を録音できなくなります。ログにエラー メッセージが表示され、メーターにデータが表示されず、サウンド ファイルが作成されません。iPhone と iPad のどちらでも、SpeakHere サンプル アプリケーションで同じ動作に気付きました。唯一の解決策は、アプリケーションを終了して再起動することです。
これに対処するために、ユーザーがレコーダーの使用を終了したときにビュー コントローラーの割り当てを解除することにしました。レコード ビュー コントローラーの ARC を無効にし、dealloc メソッドを作成しました。このコントローラーの viewDidDisappear に、[self dealloc]呼び出しを入れました。
しかし、プログラムがクラッシュし、[RecorderViewController childViewControllersCount]: メッセージ sent to deallocated instance が送信されます。そのような自己割り当ては許可されていないと思います...
解決策を見つける必要があります...
アプリケーションがバックグラウンドに移行したときにオーディオ セッションが適切に管理される方法を見つけます (録音が停止しているため、このような問題が発生する理由がわかりません)。
または、ビューが閉じられたときにレコーダ ビュー コントローラの割り当てを適切に解除して、ビューを表示する必要があるときはいつでもコントローラの XIB ファイルから再度読み込まれるようにします。
[更新] aurioTouch アプリケーションのコード (Apple dev Web サイトの別のオーディオ サンプル) を調べた後、アプリケーション デリゲートに次のコードを追加しました。
- (void)applicationDidBecomeActive:(UIApplication *)application
{
AudioSessionSetActive(true);
}
そして、私のアプリケーションでも SpeakHere アプリケーションでも動作します...回避策を見つけるのに何時間も費やしましたが、それは 1 行のコードでした!