Когда мой фильм заканчивается, приложение вылетает - PullRequest
2 голосов
/ 16 марта 2011

Я попытался запустить фильм, нажав на кнопку. Когда я нажимаю, проигрыватель фильмов появляется и работает нормально. Фильм воспроизводится до конца, и проигрыватель фильма исчезает. После того, как оно исчезает, мое приложение вылетает ...

Я использую свой View Controller в приложении панели вкладок с этим кодом:

- (void)moviePlayBackDidFinish:(NSNotification *) aNotification{

    MPMoviePlayerController *player = [aNotification object];
    [player setFullscreen:NO animated:YES];
    [player.view removeFromSuperview];
    [player stop];
    player.initialPlaybackTime = -1.0;
    [[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:player];
    [player release];
    player=nil;
}

- (IBAction)playVideo:(UIButton *)playButton{
    NSString *url = [[NSBundle mainBundle] pathForResource:@"Teaser 04" ofType:@"mov"];
    MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:url]];
    player.shouldAutoplay = YES;
    player.view.frame = CGRectMake(0., 44., self.view.bounds.size.width, self.view.bounds.size.height-44);
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(moviePlayBackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:player];
    [self.view addSubview:player.view];
    [player play];
}

Я не знаю, что я делаю не так. Я просто хочу настроить кнопку, которая запускает видео, и когда видео заканчивается, представление MoviePlayer исчезает, и приложение возвращается к моему исходному .xib

Спасибо за вашу помощь

Ответы [ 2 ]

1 голос
/ 16 марта 2011

Я нашел решение, я не знаю, является ли оно лучшим, но для того, что я хочу, оно работает:

- (void)movieFinishedCallBack:(NSNotification *) aNotification{
MPMoviePlayerController *player = [aNotification object];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:player];
[player.view removeFromSuperview];
[player stop];
[player release];

}

- (IBAction)playVideo:(UIButton *)playButton{
NSString *url = [[NSBundle mainBundle] pathForResource:@"Teaser 04" ofType:@"mov"];
MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileURLWithPath:url]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movieFinishedCallBack:) name:MPMoviePlayerPlaybackDidFinishNotification object:player];
player.view.frame = CGRectMake(0, 0, 950, 600);
[self.view addSubview:player.view];
[player play];

}

0 голосов
/ 16 марта 2011

Я могу ошибаться, но я предполагаю, что проигрыватель используется где-то в обратном следе для вызова moviePlayBackDidFinish: ... Если я прав, то освобождаем объект там - что, похоже, вы делаете - плохие новости, так как объект все еще нужен где-то в стеке.

Проверьте этот пост для более подробной информации: Как выпустить MPMoviePlayerController?

...