AVAudioRecorder 中断委托方法没有被调用

Posted

技术标签:

【中文标题】AVAudioRecorder 中断委托方法没有被调用【英文标题】:AVAudioRecorder interruption delegate methods not getting called 【发布时间】:2014-09-02 20:04:51 【问题描述】:

我正在使用AVAudiosessionAVAudioRecorder 在我的应用程序中录制音频。不幸的是,当我在录音时接到电话时,我的应用程序冻结了。我尝试为中断实现 AVAudioRecorder 委托方法,但它们没有被调用。我有一个视图控制器,用户与之交互以启动和停止录制过程,以及一个包含AVAudioRecorder 的单独录制器控制器。

我在我的记录器控制器中实现了以下功能:

@interface OSRecordPlayController : NSObject <AVAudioRecorderDelegate, AVAudioPlayerDelegate, AVAudioSessionDelegate>

-(void) audioRecorderBeginInterruption:(AVAudioRecorder *)recorder

    if(recorder.recording)
    
        [recorder stop];
        [self stopRecording];
        [self moveViewsDown];

        interruptedDuringRecording = YES;

    


-(void)audioRecorderEndInterruption:(AVAudioRecorder *)recorder withOptions:(NSUInteger)flags

     if(interruptedDuringRecording)
    
        [recorder prepareToRecord];
        [recorder record];
        interruptedDuringRecording = NO;
    


-(void)setUpAudioFile

    self.recorder = [[AVAudioRecorder alloc] initWithURL:self.audioFileURL settings:audioSettings error:nil];
    self.recorder.delegate = self;
    self.recorder.meteringEnabled = YES; 
    [self.recorder prepareToRecord];

为什么不调用这些?我为两者都设置了一个断点,但我没有击中它们。我已经看过很多没有可靠答案的问题,所有旧答案都是针对AVAudioSession 委托中断方法,但这些已被弃用。

【问题讨论】:

AVAudioPlayer and AVAudioRecorder: Delegate Methods not Called的可能重复 【参考方案1】:

使用通知而不是委托。 它在 Swift 中。

NSNotificationCenter.defaultCenter().addObserver(self,
        selector:"sessionInterrupted:",
        name:AVAudioSessionInterruptionNotification,
        object:myRecorder)

【讨论】:

嘿 Gene,你会在代码的什么地方写这个?在我的记录器控制器中? 您的对象错误:它应该是nilAVAudioSession.sharedInstance()。你不会从你的录音机收到任何东西。【参考方案2】:

如果 AVAudioRecorder 对象在录制完成之前被垃圾收集,可能会导致不调用委托方法。如果没有其他对象保留对记录器的引用,就会发生这种情况。

当然,我并没有愚蠢地犯那个错误,我自己……真的……

【讨论】:

以上是关于AVAudioRecorder 中断委托方法没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

在使用 AVAudioRecorder 在为导航栏设置动画的同时录制音频时发生中断时,我们如何停止并保存录制?

AVAudioSessionInterruptionNotification 后 AVAudioRecorder 未恢复

CALayer委托方法drawLayer没有被调用

为啥我的 UISearchController 委托方法没有被调用?

animationDidStop:完成:委托方法没有被调用

自定义 UITextField 委托方法 shouldChangeCharactersIn 没有被调用