2011-03-04 34 views
0

我正在使用其中一個視圖具有MPMoviePlayer的tabbarcontroller。它工作正常,除了如果我改變標籤,電影不停止並繼續在後臺播放。然後,如果我嘗試回到電影標籤,它會崩潰。使用tabbarcontroller時釋放MPMoviePlayer

我認爲我必須發佈MPMoviePlayer的唯一代碼就是當它完成播放時,但我希望它在我改變視圖時被釋放。然後如果我回到電影標籤,我們開始新鮮。

在我.h文件中已設置爲:


import < UIKit/UIKit.h> 

import < MediaPlayer/MediaPlayer.h> 


@interface SecondViewController : UIViewController { 
    MPMoviePlayerController *player; 
} 

@end 

,在我的.m文件有:


- (void)viewDidLoad { 

NSString *url = [[NSBundle mainBundle] 
pathForResource:@"vid" 
ofType:@"m4v"]; 

player = [[MPMoviePlayerController alloc] 
initWithContentURL:[NSURL fileURLWithPath:url]]; 

[[NSNotificationCenter defaultCenter] 

addObserver:self 
selector:@selector(movieFinishedCallback:) 
name:MPMoviePlayerPlaybackDidFinishNotification 
object:player]; 

//--called when the movie view and then add it to the View window-- 
player.view.frame = CGRectMake(10, 10, 300, 300); 
[self.view addSubview:player.view]; 

    //--play movie-- 
    [player pause]; 

    [super viewDidLoad]; 
} 

//--called when the movie is done playing-- 
- (void) movieFinishedCallback:(NSNotification*) aNotification { 
    MPMoviePlayerController *moviePlayer = [aNotification object]; 
    [[NSNotificationCenter defaultCenter] 
    removeObserver:self 
    name:MPMoviePlayerPlaybackDidFinishNotification 
    object:moviePlayer]; 
    [moviePlayer.view removeFromSuperview]; 
    [player release]; 
} 

任何建議?謝謝:)

+0

或...是否有可能讓視圖全屏打開視頻(就像我認爲舊的視頻播放代碼曾經這樣做),然後你要麼退出部分路徑,要麼一直觀看它?也許有這個鏈接從選項卡視圖中的播放按鈕? – 2011-03-04 16:21:44

回答

0

如果你真的想在標籤切換到釋放MPMoviePlayer,然後做在viewWillDisappearviewDidDisappear。正如你所描述的那樣,它現在在背景中活着。當你回到標籤頁時,你會嘗試再次創建它。

很難說什麼是碰撞的確切原因,似乎有幾種可能性。下次使用調用堆棧編寫「爲什麼會發生這種崩潰」問題。

也許你可以考慮暫停/恢復,所以每次用戶更改標籤時都不需要重新分配新的moviePlayer?在viewDidLoad和viewDidUnload中執行alloc/release,但在viewWillAppear和viewWillDisappear中播放/暫停。