удаление автоматически выпущенного UIWebview приводит к сбою - PullRequest
0 голосов
/ 01 декабря 2011

У меня есть представление, содержащее подпредставление, которое, в свою очередь, содержит UIWebview.

подпредставление выделено и автоматически выпущено

theController = [[[viewContainer alloc] initWithNibName:@"viewContainer" bundle:[NSBundle mainBundle]]  autorelease];

Контент для веб-просмотра загружается на ViewDidLoad в подпредставлении.

Я могу удалить это подпредставление без проблем - если приложение раньше не уходило в фоновый режим! Веб-просмотр содержит ссылку - когда пользователь нажимает на нее, приложение переходит в фоновый режим, и Safari открывает ссылку. Все идет нормально. Когда я возвращаюсь в приложение сейчас и пытаюсь удалить подпредставление, содержащее веб-представление, я получаю эту ошибку:

bool _WebTryThreadLock(bool), 0x7f3e970: Tried to obtain the web lock from a thread other than the main thread or the web thread. This may be a result of calling to UIKit from a secondary thread. Crashing now...

[редактировать]

Не нашел решения, просто обходной путь (спасибо Jumhyn за помощь!):

Я добавил NSNotification в подпредставление, которое содержит веб-представление. Когда я получаю applicationDidBecomeActive-Notification, я просто снова использую тот же NSURLrequest, который я использую в viewDidLoadMethod, и перезагружаю содержимое веб-просмотра. Теперь я могу безопасно удалить вид, не получив сообщение об ошибке ...

Очень странное поведение ...

1 Ответ

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

Вы действительно хотите использовать autorelease только тогда, когда не собираетесь использовать объект в течение длительного периода времени.Вместо этого используйте переменную экземпляра для хранения вашего контроллера представления и release в методе dealloc.Кроме того, вы можете конвертировать ваш проект в ARC, что полностью исключает необходимость вызовов retain и release.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...