iphone MPMoviePlayerViewController CGContext错误

时间:2012-11-02 21:33:23

标签: iphone xcode cgcontext

我正在为iPhone编写一个应用程序,它将使用MPMoviePlayerViewController播放一些电影。到目前为止,我已经得到它来播放电影,但它在调试器中抛出一些错误,都是以CGContext开头的。我试图解决它已经破坏了我的大脑。以下是我的代码的详细信息:

.h文件:

#import <UIKit/UIKit.h>
#import <MediaPlayer/MediaPlayer.h>
@interface MovieViewController : UIViewController {
    MPMoviePlayerViewController *playerController;
}

-(IBAction) playMovie:(id)sender;

.m文件:

@interface MovieViewController ()
@end
@implementation

-(IBAction)playMovie:(id)sender {
NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                     pathForResource:@"moviename" ofType:@"mp4"]];
playerController =  [[MPMoviePlayerViewController alloc]
                     initWithContentURL:url];
[self presentMoviePlayerViewControllerAnimated:playerController];
playerController.moviePlayer.movieSourceType = MPMovieSourceTypeFile;
[playerController.moviePlayer play];
playerController = nil; 
}

当我运行程序时,电影将播放,但是当代码执行以下行:playerController = [[MPMoviePlayerViewController alloc] initWithContentURL:url];时会发生以下错误:

<Error>: CGContextSaveGState: invalid context 0x0
<Error>: CGContextClipToRect: invalid context 0x0
<Error>: CGContextTranslateCTM: invalid context 0x0
<Error>: CGContextDrawShading: invalid context 0x0
<Error>: CGContextRestoreGState: invalid context 0x0

我知道invalid context 0x0表示这些特定变量没有值,但我不知道如何解决这个问题。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:24)

我遇到了同样的问题。仅仅这样说:

MPMoviePlayerViewController* mpvc = 
    [[MPMoviePlayerViewController alloc] initWithContentURL: m];

导致了这些invalid context错误消息。视图控制器的视图(全屏播放器)在出现时确实出现,并且播放电影没问题;唯一的问题是这些错误消息,我不想在控制台中显示。

从Norman的解决方案中得到一个暗示,我只是简单地将调用包裹在一个人工绘图环境中,如下所示:

UIGraphicsBeginImageContext(CGSizeMake(1,1));
MPMoviePlayerViewController* mpvc = 
    [[MPMoviePlayerViewController alloc] initWithContentURL: m];
UIGraphicsEndImageContext();

这很愚蠢,但确实有效。

答案 1 :(得分:8)

我认为错误消息是MPMoviePlayerViewController中的错误

他们似乎不是致命的,虽然我已经通过增加一个来消除它们 调用UIGraphicsBeginImageContext(self.view.frame.size);在readyPlayer()中 和viewDidLoad()。

我还在dealloc()中添加了一个UIGraphicsEndImageContext()来清理生成的上下文。