9

を利用していくつかの映画を再生する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これは、これらの特定の変数に値がないことを意味しますが、これを修正する方法がわかりません。どんな助けでも大歓迎です。

4

2 に答える 2

24

私は同じ問題を抱えていました。単にこれを言っている:

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

invalid contextこれらのエラーメッセージを引き起こしていました。ビューコントローラのビュー(フルスクリーンプレーヤー)は、提示されたときに表示され、映画を問題なく再生しました。唯一の問題は、これらのエラーメッセージでしたが、コンソールに表示したくありませんでした。

Normanのソリューションからヒントを得て、次のように、呼び出しを人工的な描画コンテキストでラップしました。

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

ばかげていますが、機能します。

于 2013-02-03T03:15:31.233 に答える
8

エラーメッセージはMPMoviePlayerViewControllerのバグだと思います

UIGraphicsBeginImageContext(self.view.frame.size);への呼び出しを追加することでそれらをなくしましたが、それらは致命的ではないようです。readyPlayer()とviewDidLoad()の両方で。

また、UIGraphicsEndImageContext()をdealloc()に追加して、生成されたコンテキストをクリーンアップしました。

于 2012-11-18T20:50:32.787 に答える