0

Mac アプリで AVAudioRecorder を使用しています。私の.mファイルで私は宣言します

@interface RecordViewController ()
{
    AVAudioRecorder *audioRecorder;
...
}
@end

さらに下に、次のようにオブジェクトを初期化します。

audioRecorder = [[[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recorderSettings error:&error] retain];
...
[audioRecorder prepareToRecord];
...
[audioRecorder record];

ファイルが作成されることがわかりますが、4KB しかありません。エラーは発生しませんが、テストする[audioRecorder isRecording]と [audioRecorder が記録されていません。ARC を使用しておらず、dealloc メソッドが呼び出されていないにもかかわらず、オブジェクトが解放されたと想定しています。

AVAudioPlayer でも同様の問題がありましたがretain]、alloc init に追加することで解決しました。

私は何を間違っていますか?

ありがとう

更新 1:

私は次のことも試みました(すべて同じ方法で):

[audioRecorder record];
NSLog(@"recording is ... %d", [audioRecorder isRecording]);

結果は 0 です。

使用する必要がありますselfか? または遅延インスタンス化audioRecorder

更新 2: プロジェクトを再作成しました - TEST と呼び、古いプロジェクトからソース コードをコピーしました。今それは動作しますか?!?! 図に行きます。ソースコードは行ごとに同じです。これは XCode の既知の問題ですか?

4

2 に答える 2

1

まず、コメントに基づいて、インスタンスにまだアクセスできる場合は、オブジェクトが解放されていないことを意味します。

AVAudioRecorder はデリゲート ( AVAudioRecorderDelegate ) を提供します。録音が成功した場合、または何らかのエラーが発生した場合、ログにデリゲートを使用しようとしましたか?

特に、 audioRecorderEncodeErrorDidOccur:error:記録中にエラーが発生した場合、このメソッドは何らかのエラーを発生させるはずです。

ところで、オブジェクトの所有権を取得したので解放するretain]必要があるため、追加は必要ありません。alloc init

于 2012-07-24T13:57:37.013 に答える
0

割り当てて初期化して解放しないため、解放しない限り解放できません(自動解放もされません)。

ARC が有効になっている場合は、強力でなければなりません。

http://chinki-singh.blogspot.com/2011/07/how-to-record-audio-using.htmlをご覧ください。

于 2012-07-24T13:44:37.920 に答える