Youtube плеер в UIWebView в ModalViewController - PullRequest
3 голосов
/ 24 февраля 2011

Я работаю над приложением, предназначенным для> iOS 4. В этом приложении я отображаю UIWebView как modalView (внутри UIViewController, который выталкивается из UITableViewController, живущего в UINavigationController;)):

SettingsViewController *settings = [[SettingsViewController alloc] initWithNibName:@"SettingsView" bundle:nil];
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:settings];
[self.navigationController presentModalViewController:navController animated:YES];
[settings release];
[navController release];

Показывает модальное представление с UITableView. Как только конкретная строка нажата, мой контроллер просмотра браузера выдвигается:

        WebBrowserViewController *vc = [[WebBrowserViewController alloc] initWithNibName:@"WebBrowserView" bundle:nil];
        [self.navigationController pushViewController:vc animated:YES];
        [vc goToUrl:@"http://www.example.com"];
        [vc release];

Внутри WebBrowserViewController находится UIWebView и некоторые элементы управления браузером (адресная строка, кнопки возврата и обновления). Это все работает, как ожидалось.

К проблеме: Если на веб-сайте есть видео с YouTube, и по ним щелкают, проигрыватель YouTube запускает полноэкранный режим. Когда я закрываю проигрыватель YouTube (кнопка «Готово»), проигрыватель закрывается, по-видимому, мой модальный вид тоже закрывается, и приложение вылетает после отображения моего контроллера корневого представления в течение секунды.

Это вывод консоли:

2011-02-24 14:52:51.109 MyApp[498:307] modifying layer that is being finalized - 0x14eda0
2011-02-24 14:52:51.113 MyApp[498:307] modifying layer that is being finalized - 0x14b590
2011-02-24 14:52:51.117 MyApp[498:307] modifying layer that is being finalized - 0x14c630
2011-02-24 14:52:51.262 MyApp[498:307] modifying layer that is being finalized - 0x14eda0
2011-02-24 14:52:51.270 MyApp[498:307] *** -[CALayer sublayers]: message sent to deallocated instance 0x178fe0

Я предполагаю, что, как только проигрыватель YouTube запустится, мой контроллер модального вида будет освобожден, и возврат к нему не удастся. Мне не удалось найти место для добавления сохранения или подобного ...

Кто-нибудь видел, как это происходит, и может дать мне подсказку, что делать?

Спасибо, Марк.

1 Ответ

1 голос
/ 09 ноября 2011

См. Это: Reg: изменение слоя, который завершается ....... [CALayer frame]: сообщение отправлено на освобожденный экземпляр 0xe43c520

Ошибка "modifying layer that is being finalized" возникает, когда вы пытаетесь изменить свойства CALayer, когда он находится в процессе освобождения. Я видел это, когда случайно использовал метод доступа для очистки свойства CALayer в методе -dealloc этого слоя.

...