2011-12-12 99 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]; 
} 

音頻播放按鈕單擊。

[self.previewAudioPlayer play]; 

現在,如果視圖控制器駁回或pop'ed,dealloc的應該叫和音頻播放器應該停止和視圖控制器應該被銷燬。但是,這不會發生。音頻不會停止,因爲在音頻停止播放之前不會調用dealloc。這裏發生了什麼?而且,我如何確保如果用戶解散了控制器而不是音頻停止。

+0

你知道如何播放繼續音頻後,我們已經創建了AVPlayer實例的ViewController。 –

回答

2

當視圖被取消時,即可調用viewWillDisappear:viewDidDisappear:方法時,您可以暫停或停止音頻。

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [_previewAudioPlayer stop]; 
    [super viewWillDisappear:animated]; 
} 
+1

這確實解決了這個問題,但是我仍然在尋找「爲什麼不是dealloc方法被調用」的答案。謝謝。 – Mustafa

+0

你知道如何播放繼續音頻後,我們已經創建了AVPlayer的實例銷燬ViewController。 –

+0

您可能必須保持'AVAudioPlayer'實例不知何故。如果視圖控制器是所有者,那麼它在播放時就會播放。 –