IOS5: Исключение в UIWebView в модальном UIViewController, воспроизводящем видео Youtube
ОБНОВЛЕНИЕ: Больше не происходит на iOS 6 beta 1
В настоящее время я работаю над адаптацией существующего приложения iOS 4 к новому SDK iOS 5.
Я обнаружил новый сбой при представлении UIWebView в модульном контроллере просмотра, который читает видео Youtube.
Начало чтения видео в порядке, но когда я пытаюсь установить его на полный экран, я получаю следующее исключение:
Exception: UIViewControllerHierarchyInconsistency,
child view controller:<UIViewController: 0x6aef180>
should have parent view controller:<WebViewController: 0x6a706c0>
but requested parent is:<MPInlineVideoViewController: 0x6ae5d40>
Вот как я внедряю и представляю свой контроллер модального представления в моем основном контроллере представления:
- (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, вот как я загружаю видео Youtube:
- (void)viewDidLoad
{
[super viewDidLoad];
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=bDlm3eLRut0"]]];
}
Любые идеи по этой проблеме?
Я могу предоставить полный образец кода, который изолирует этот сбой при необходимости.
Спасибо!
Ответы
Ответ 1
Эти предупреждения консолью связаны с загрузкой аудиокомпонентов на вашем Mac. Это симулятор, а не эмулятор - симулятор по-прежнему является приложением для Mac OS X, поэтому при использовании звука он загружает все аудио kexts, которые загружаются приложениями Mac. Это происходит, когда я тестирую потоковое аудио для моего приложения Bandcamp Kumbaya в симуляторе. Если вы не хотите видеть эти проблемы, проверьте на устройстве.
Если вы хотите, вы можете обернуть свои аудио методы с помощью
#if ! TARGET_IPHONE_SIMULATOR
#endif
чтобы отключить их в симуляторе.
Ответ 2
Мы решили это, в основном реализуя наши собственные модальные переходы. Это было довольно легко сделать; Я построил его примерно через 4 часа.
Вы также можете избежать сбоя, если вы представляете его в полноэкранном режиме. Причиной аварии являются листы, листы форм или листы страниц.
Ответ 3
У меня была такая же проблема в моем приложении. Оказалось, что я установил неправильный rootViewController
в UIWindow
.
У меня есть следующая иерархия диспетчера представлений в моем NIB:
Navigation Controller
+- Main View Controller
Выход rootViewController
UIWindow
был установлен на Main View Controller
вместо Navigation Controller
. Как только я изменил выход на Navigation Controller
, исключение UIViewControllerHierarchyInconsistency
больше не произошло.
Ответ 4
У нас была такая же проблема при воспроизведении видео на iPad в модульном контроллере pageSheet.
Это произошло только для нас
- IOS 5 (5.0 + 5.1)
- iPad в ландшафтном режиме
- Представлен контроллер Webview
модально и загрузка видеоресурса в режиме PageSheet/FormSheet
Мы исправили его, выставив контроллер в полноэкранном режиме для 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];