使用tabbarcontroller时释放MPMoviePlayer

时间:2011-03-04 14:26:18

标签: iphone cocoa-touch 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];
}

有什么建议吗?谢谢:))

1 个答案:

答案 0 :(得分:0)

如果您确实要在制表符开关中发布MPMoviePlayer,请在 viewWillDisappear viewDidDisappear 中进行。正如你所描述的那样现在它在背景中保持活力。当您返回选项卡时,您会尝试再次创建它。

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

也许你可以考虑暂停/恢复,所以每次用户更改标签时你都不需要重新分配新的moviePlayer?在viewDidLoad和viewDidUnload中进行alloc / release,但在viewWillAppear和viewWillDisappear中播放/暂停。