我有一个标签式应用程序。每个选项卡都会在导航控制器中加载一个表视图控制器,以维护上部导航栏。
表格视图控制器显示视频列表。单击表格单元格后,将向用户显示一个MPMoviePlayerViewController,它使用以下代码加载所请求的视频:
VideoViewController * playerController = [[VideoViewController alloc] initWithContentURL:url];
[self.navigationController pushViewController:playerController animated:YES];
[playerController.moviePlayer prepareToPlay];
[playerController.moviePlayer play];
UIBarButtonItem *mailButton = [[UIBarButtonItem alloc] initWithTitle:@"Email Link" style:UIBarButtonItemStylePlain target:self action:@selector(openMailBasket:)];
playerController.navigationItem.rightBarButtonItem = mailButton;
注意:VideoViewController是MPMoviePlayerViewController的子类。
这很有效。但是,如果我点击底部的标签导航到另一个部分,然后返回“视频”部分,则会出现行为异常。
在IOS 5中,视频从头开始。这很好。
在IOS 6中,我得到一个空白的视频屏幕,上面写着“正在加载......”并且从不加载。
在IOS 7中,我获得了一个黑色视频播放器,总时间为0:00。
就像视频在IOS 6和IOS 7中被“卸载”一样。但是,如果我在viewWillAppear中执行它:
NSString *vidURL = [self.moviePlayer.contentURL absoluteString];
NSLog(@"URL: %@",vidURL);
网址有效。
注意:我必须使用MPMoviePlayerViewController而不是MPMoviePlayerController,因为我需要“Email Link”按钮显示在顶部。
当我在其他地方导航时,是否需要执行任何特殊操作以使MPMoviePlayerViewController维持视频的状态? ARC是否取消分配我的视频,如果是,为什么它在IOS 5中有效,我该怎么办呢?
答案 0 :(得分:0)
好吧,显然在这里输入它让我找到了解决方案,所以我会把它解决。
我开始考虑为什么它在IOS 5而不是6或7上工作。在我看来,ARC可能是自动释放我的视频数据,我需要一种方法来告诉IOS我想把电影带回来
我需要做的就是添加:
-(void)viewWillAppear:(BOOL)animated
{
[self.moviePlayer prepareToPlay];
}
到我的VideoViewController类。