Отпустите MPMoviePlayer при использовании tabbarcontroller - PullRequest
0 голосов
/ 04 марта 2011

Я использую 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];
}

Есть предложения?Спасибо:)

1 Ответ

0 голосов
/ 06 апреля 2011

Если вы действительно хотите выпустить MPMoviePlayer при переключении табуляции, сделайте это в viewWillDisappear или viewDidDisappear .Теперь он остается живым на заднем плане, как вы описали.Когда вы возвращаетесь на вкладку, вы пытаетесь создать ее снова.

Сложно сказать, какова будет точная причина сбоя, кажется, есть несколько возможностей.В следующий раз напишите вопрос «Почему произошел сбой» с помощью стека вызовов.

Может быть, вы могли бы подумать о простой паузе / возобновлении, чтобы вам не приходилось перераспределять новый moviePlayer каждый раз, когда пользователь меняет вкладки?Сделайте alloc / release в viewDidLoad и viewDidUnload, но воспроизведите / приостановите в viewWillAppear и viewWillDisappear.

...