iOS5: исключение для UIWebView в модальном UIViewController, воспроизводящем видео Youtube - PullRequest
19 голосов
/ 26 октября 2011

ОБНОВЛЕНИЕ: Больше не происходит на iOS 6 бета 1

В настоящее время я работаю над адаптацией существующего приложения для iOS 4 с новым iOS 5 SDK. Я обнаружил новый сбой при представлении 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"]]];
}

Есть идеи по этой проблеме? Я могу предоставить полный пример кода, который изолирует этот сбой при необходимости.

Спасибо!

Ответы [ 4 ]

2 голосов
/ 31 марта 2012

Мы решили эту проблему путем реализации собственных переходов модального представления. Это было на самом деле довольно легко сделать; Я построил его примерно за 4 часа.

Вы также можете избежать сбоя, если вы представляете его модально на весь экран. Листы, как листы форм, так и листы, являются причинами сбоя.

2 голосов
/ 03 ноября 2011

Эти предупреждения консоли связаны с загрузкой аудио компонентов на вашем Mac. Это симулятор, а не эмулятор - симулятор по-прежнему является приложением Mac OS X, поэтому при использовании звука он загружает все аудиокэши, загружаемые приложениями Mac. Это происходит, когда я тестирую потоковое аудио для моего приложения Bandcamp Kumbaya в симуляторе. Если вы не хотите видеть эти проблемы, протестируйте на устройстве.

Если вы хотите, вы можете обернуть ваши аудио методы с помощью:

#if ! TARGET_IPHONE_SIMULATOR
#endif

чтобы отключить их в симуляторе.

1 голос
/ 15 декабря 2011

У меня была такая же проблема в моем приложении.Оказалось, что я неправильно установил rootViewController в UIWindow.

У меня есть следующая иерархия контроллеров представления в моем NIB:

Navigation Controller
+- Main View Controller

Выход rootViewController в UIWindow было установлено Main View Controller вместо Navigation Controller.Как только я изменил розетку на Navigation Controller, исключение UIViewControllerHierarchyInconsistency больше не возникало.

0 голосов
/ 12 марта 2013

У нас была такая же проблема при воспроизведении видео на iPad в модальном контроллере pageSheet.

Это случилось только для нас

  • IOS 5 (5.0 + 5.1)
  • iPad в альбомном режиме
  • Контроллер Webview представлен модально и загружает видеоресурс в режиме PageSheet / FormSheet

Мы исправили это, принудив контроллер в полноэкранном режиме для IOS5. Теперь работает нормально.

//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];
...