2014-09-02 3 views
0

AVAudioSessionAVAudioRecorder을 사용하여 내 응용 프로그램에 오디오를 녹음합니다. 불행히도 녹음하는 동안 전화를 받으면 내 앱이 정지됩니다. 중단에 대한 AVAudioRecorder 대리자 메서드 구현을 시도했지만 호출되지 않았습니다. 사용자가 녹화 프로세스를 시작하고 중지하기 위해 상호 작용하는보기 컨트롤러와 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 대리자 메서드에 대한 것이지만, 그것들은 더 이상 사용되지 않습니다.

+3

중복 가능성이 있음을 그 오류를하지 않았다 question/6579257/avaudioplayer-and-avaudiorecorder-delegate-methods-not-called) –

답변

1

위임자 대신 알림을 사용하십시오. 여기 스위프트에 있습니다.

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

안녕하세요 진, 코드에서이 코드를 어디에 써야합니까? 내 레코더 컨트롤러에? – Brosef

+1

AppDelegate가 좋은 장소입니다. –

1

위임 메서드가 호출되지 않도록 할 수있는 한 가지는 AVAudioRecorder 개체가 녹음이 끝나기 전에 가비지 수집되는 경우입니다. 이것은 다른 객체가 레코더에 대한 참조를 유지하지 않을 경우 발생합니다. [: 위임 메소드 호출하지 AVAudioPlayer 및 AVAudioRecorder] (http://stackoverflow.com/ 물론

, 나는 바보 실제로 자신이 ... 정말 ...의

관련 문제