我在尝试将我的应用程序升级到 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 中运行良好。
注意:我在这个项目中使用 Three20 和 TTNavigator。TTNavigator 似乎不支持新的 supportedOrientations 设置,因此在 iPad 上我必须从头开始构建我的标签栏,这样我就不会收到以下错误,因此它将在横向启动:
应用程序在应用程序启动结束时应该有一个根视图控制器
我仍然在 iPhone 上收到此错误,但我不知道它是否与 iPad 上未发生的视频播放器崩溃有关。
有任何想法吗?
谢谢