我在我的mac应用程序中使用AVAudioRecorder。在我的.m文件中,我声明了
@interface RecordViewController ()
{
AVAudioRecorder *audioRecorder;
...
}
@end
再往下我然后像这样分配init对象:
audioRecorder = [[[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recorderSettings error:&error] retain];
...
[audioRecorder prepareToRecord];
...
[audioRecorder record];
我可以看到该文件已创建,但它只有4KB。我没有收到错误,但当我测试[audioRecorder isRecording]
时,我可以看到[audioRecorder不再录制。我假设对象已被释放,即使我没有使用ARC并且没有调用dealloc方法。
我遇到了与AVAudioPlayer类似的问题,但附加到alloc init的附加retain]
解决了这个问题。
我做错了什么?
由于
更新1:
我甚至尝试过以下操作(所有方法都相同):
[audioRecorder record];
NSLog(@"recording is ... %d", [audioRecorder isRecording]);
,结果为0。 ???
我必须使用self
吗?或者懒惰地实例化audioRecorder
?
更新2: 我重新创建了项目 - 称为TEST并从我的旧项目中复制了源代码。现在它有效吗?!?!去搞清楚。源代码行相同。这是XCode的已知问题吗?
答案 0 :(得分:1)
首先,根据您的评论,如果您仍然可以访问该实例,则意味着您的对象不是dealloc。
AVAudioRecorder提供委托(AVAudioRecorderDelegate)如果录制成功或者出现错误,您是否尝试使用委托进行日志?
特别是方法audioRecorderEncodeErrorDidOccur:error:
如果在录制时发生错误会给你一些错误。
顺便说一句,不需要添加retain]
,因为您已获得对象的所有权,而您应该释放。{/ p>
答案 1 :(得分:0)
除非你发布它,否则无法发布,因为你分配和初始化而你没有释放。(它也不是自动释放的。)
如果启用了ARC,则必须强大。
请查看http://chinki-singh.blogspot.com/2011/07/how-to-record-audio-using.html