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
UIWindow
的rootViewController
出口被设置Main View Controller
而不是Navigation Controller
。 一旦我改变了Navigation Controller
的出口UIViewControllerHierarchyInconsistency
exception不再发生。
我们在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];