Подтвердить что ты не робот

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"]]];
}

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

Спасибо!

4b9b3361

Ответ 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];