0

我正在使用其中一个视图具有 MPMoviePlayer 的 tabbarcontroller。它工作正常,除了如果我更改标签,电影不会停止并继续在后台播放。然后,如果我尝试返回到电影选项卡,它就会崩溃。

我认为我必须释放 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];
}

有什么建议么?谢谢 :)

4

1 回答 1

0

如果您真的想在选项卡切换时释放 MPMoviePlayer,请在viewWillDisappearviewDidDisappear中进行。正如你所描述的,现在它在后台仍然存在。当您返回选项卡时,您尝试再次创建它。

很难说崩溃的确切原因是什么,似乎有几种可能性。下次用调用堆栈写一个“为什么会崩溃”的问题。

也许您可以考虑暂停/恢复,这样您就不需要每次用户更改标签时都重新分配新的电影播放器​​?在 viewDidLoad 和 viewDidUnload 中分配/释放,但在 viewWillAppear 和 viewWillDisappear 中播放/暂停。

于 2011-04-06T12:28:34.107 回答