iOS5:在UIWebView模式UIViewController播放Youtubevideo的例外

更新: iOS 6 beta 1不再发生

我目前正在使用新的iOS 5 SDK调整现有的iOS 4应用程序。 在用于读取Youtubevideo的模式视图控制器中呈现UIWebView时,发现新的崩溃。

开始阅读video是好的,但是当我尝试全屏设置,我得到以下exception:

Exception: UIViewControllerHierarchyInconsistency, child view controller:<UIViewController: 0x6aef180> should have parent view controller:<WebViewController: 0x6a706c0> but requested parent is:<MPInlineVideoViewController: 0x6ae5d40> 

这里是我如何instanciate和我的主视图控制器中呈现我的模式视图控制器:

 - (IBAction)buttonReleased:(id)sender { WebViewController *webVC = [[WebViewController alloc] initWithNibName:@"WebViewController" bundle:[NSBundle mainBundle]]; webVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical; webVC.modalPresentationStyle = UIModalPresentationPageSheet; [self presentModalViewController:webVC animated:YES]; } 

我使用UIModalPresentationPageSheet作为modalPresentationStyle,当我将此值设置为UIModalPresentationFullScreen时,错误不再发生。

在我的模式WebViewController,这里是我如何加载我的Youtubevideo:

 - (void)viewDidLoad { [super viewDidLoad]; [self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=bDlm3eLRut0"]]]; } 

关于这个问题的任何想法? 我可以提供一个完整的示例代码来隔离这个崩溃,如果需要的话。

谢谢 !

这些控制台警告是由于您的Mac上的audio组件被加载。 这是一个模拟器,而不是模拟器 – 模拟器仍然是一个Mac OS X应用程序,所以当使用audio时,它会加载所有Mac应用程序加载的audiokext。 当我在模拟器中testing我的Bandcamp应用程序Kumbaya的audiostream时会发生这种情况。 如果您不想看到这些问题,请在设备上进行testing。

如果你愿意,你可以用下面的方法来包装audio方法:

 #if ! TARGET_IPHONE_SIMULATOR #endif 

在模拟器中禁用它们。

我们通过基本实现自己的模态视图转换来解决这个问题。 这实际上很容易做到; 我在大约4个小时内build成了它。

你也可以避免崩溃,如果你是模态地显示全屏。 表格,表单或页面,是导致崩溃的原因。

我的应用程序中有同样的问题。 原来我在UIWindow设置了错误的rootViewController

我在我的NIB中有以下视图控制器层次结构:

 Navigation Controller +- Main View Controller 

UIWindowrootViewController出口被设置Main View Controller而不是Navigation Controller 。 一旦我改变了Navigation Controller的出口UIViewControllerHierarchyInconsistencyexception不再发生。

我们在iPad上使用pageSheet模式控制器播放video时遇到了同样的问题。

它只发生在我们身上

  • IOS 5(5.0 + 5.1)
  • iPad处于横向模式
  • Webview控制器以模态方式呈现并以PageSheet / FormSheet模式加载video资源

我们已经通过强制控制器在全屏IOS 5来修复它。现在工作正常。

 //Fix for IOS 5.0 issues with playing video in pageSheet float version = [[[UIDevice currentDevice] systemVersion] floatValue]; if (version >= 6.0) { [controllerToDisplayModally setModalPresentationStyle:UIModalPresentationPageSheet]; } else { [controllerToDisplayModally setModalPresentationStyle:UIModalPresentationFullScreen]; } [controllerToDisplayModally setModalTransitionStyle:UIModalTransitionStyleCoverVertical]; [self presentViewController:controllerToDisplayModally animated:YES completion:nil];