2011-12-12 5 views
3

보기 컨트롤러와 연결된 AVAudioPlayer 인스턴스가 있습니다.AVAudioPlayer 재생/일시 정지/중지 및 UIViewController 릴리스/dealloc

@property (nonatomic, retain) AVAudioPlayer *previewAudioPlayer; 

-viewDidLoad으로 초기화했습니다.

NSError *error = nil; 
AVAudioPlayer *aNewPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error]; 
self.previewAudioPlayer = aNewPlayer; 
[aNewPlayer release]; 

[self.previewAudioPlayer prepareToPlay]; 

그리고보기 컨트롤러 -dealloc에서 해제합니다.

- (void)dealloc { 
    [_previewAudioPlayer pause]; 
    [_previewAudioPlayer release]; 

    [super dealloc]; 
} 

오디오는 버튼 클릭으로 재생됩니다. 뷰 컨트롤러가 기각 또는 pop'ed 경우

[self.previewAudioPlayer play]; 

는 이제, dealloc을 호출해야하며, 오디오 플레이어는 중지해야하고 뷰 컨트롤러가 파괴되어야한다. 그러나 이것은 발생하지 않습니다. 오디오는 멈추지 않습니다. 오디오가 재생을 멈출 때까지 dealloc이 호출되지 않기 때문입니다. 무슨 일 이니? 그리고 어떻게하면 오디오가 멈추는 지 사용자가 컨트롤러를 없앨 지 확신 할 수 있습니다.

+0

오디오를 계속 재생하는 방법을 아십니까? 우리는 AVPlayer의 인스턴스를 만든 ViewController를 파괴했습니다. –

답변

2

보기가 해제 될 때, 즉 viewWillDisappear: 또는 viewDidDisappear: 메쏘드가 호출 될 때 오디오를 일시 중지하거나 중지 할 수 있습니다.

+1

이것은 문제를 해결하지만 여전히 "왜 dealloc 메서드가 호출되지 않습니다"에 대한 대답을 찾고 있습니다. 감사. – Mustafa

+0

AVPlayer의 인스턴스를 생성 한 후 ViewController가 파괴 된 후에 오디오를 계속 재생하는 방법을 알고 계셨습니까? –

+0

아마'AVAudioPlayer' 인스턴스를 어떻게 든 살아 있어야합니다. 보기 컨트롤러가 소유자 인 경우, 그것이 죽으면 플레이어가됩니다. –