アプリケーションを iOS 6 にアップグレードしようとすると、奇妙なクラッシュが発生します。注: このクラッシュは iPhone でのみ発生します。iPad は問題ありません。
<Error>: CGContextSaveGState: invalid context 0x933f7d0
<Error>: CGContextClipToRect: invalid context 0x933f7d0
<Error>: CGContextTranslateCTM: invalid context 0x933f7d0
<Error>: CGContextDrawShading: invalid context 0x933f7d0
<Error>: CGContextRestoreGState: invalid context 0x933f7d0
<Error>: CGBitmapContextCreateImage: invalid context 0x933f7d0
-[Not A Type release]: message sent to deallocated instance 0x933f7d0
これは、MPMoviePlayerViewController が初期化されるときに発生します。
self.moviePlayerController = [[[MPMoviePlayerViewController alloc] initWithContentURL:_videoUrl] autorelease];
ここで、moviePlayerController は合成されて保持されるプロパティです。
完全なセットアップは次のとおりです。
-(void)setupMediaPlayer {
//NSLog(@"VideoViewController:setupMediaPlayer");
CGRect viewFrame = self.view.frame;
if (self.moviePlayerController == nil) {
self.moviePlayerController = [[[MPMoviePlayerViewController alloc] initWithContentURL:_videoUrl] autorelease];
}
else {
[self.moviePlayerController.moviePlayer setContentURL:_videoUrl];
}
[[self.moviePlayerController view] setFrame:viewFrame];
[self.navigationController.view addSubview:[self.moviePlayerController view]];
}
_videoURL をチェックしたところ、毎回適切な URL が表示されています。
代わりにこれを MPMoviePlayerController に変更しようとしましたが、generalCallback 以外の通知はどれも発生しません。次のようにセットアップします (ただし、非 ViewController オプションでは .moviePlayer が削除されます)。
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackDidFinishNotification object:self.moviePlayerController.moviePlayer];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerLoadStateDidChangeNotification object:self.moviePlayerController.moviePlayer];
[[NSNotificationCenter defaultCenter] removeObserver:self name:MPMoviePlayerPlaybackStateDidChangeNotification object:self.moviePlayerController.moviePlayer];
これがiOS 5で完全に機能しているので、私は困惑しています。
注: このプロジェクトと TTNavigator には Three20 を使用しています。TTNavigator は、新しい supportedOrientations セットアップをサポートしていないようです。そのため、iPad では、次のエラーが発生しないようにタブバーを最初から作成する必要があり、ランドスケープで起動しました。
アプリケーションは、アプリケーションの起動の最後にルート ビュー コントローラーを持つことが期待されます
iPhone ではまだこのエラーが発生しますが、iPad では発生していないビデオ プレーヤーのクラッシュに関連している可能性があるかどうかはわかりません。
何か案は?
ありがとう