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

时间:2014-09-02 20:04:51

标签: ios avfoundation avaudiorecorder

我正在使用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委托方法的中断,但这些方法已被弃用。

2 个答案:

答案 0 :(得分:2)

使用通知代替委托。 这是在Swift。

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

答案 1 :(得分:1)

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

当然,我自己并没有愚蠢地犯这样的错误......真的......