我正在使用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 :(得分:0)
如果您确实要在制表符开关中发布MPMoviePlayer,请在 viewWillDisappear 或 viewDidDisappear 中进行。正如你所描述的那样现在它在背景中保持活力。当您返回选项卡时,您会尝试再次创建它。
很难说崩溃的确切原因是什么,似乎有几种可能性。下次用调用堆栈写一个“为什么这个崩溃”的问题。
也许你可以考虑暂停/恢复,所以每次用户更改标签时你都不需要重新分配新的moviePlayer?在viewDidLoad和viewDidUnload中进行alloc / release,但在viewWillAppear和viewWillDisappear中播放/暂停。