исключение webViewDidFinishLoad - PullRequest
0 голосов
/ 11 апреля 2010

У меня есть экран с веб-представлением в стеке моего контроллера навигации, и когда я перехожу от этого представления к предыдущему до полной загрузки страницы, я получаю EXCEPTION_BAD_ACCESS. Похоже, что представление с webView освобождается до того, как оно перейдет к функции webViewDidFinishLoad. Мой вопрос, как преодолеть эту проблему? Я не ожидаю от пользователя ожидания загрузки страницы ... Код очень прост:

- (void) viewWillAppear:(BOOL)animated

{

[super viewWillAppear:animated];

NSURL *url = [NSURL URLWithString:storeUrl];

//URL Requst Object
NSURLRequest *requestObj = [NSURLRequest requestWithURL:url];

//Load the request in the UIWebView.
[browser loadRequest:requestObj];

}

ТИА

1 Ответ

1 голос
/ 11 апреля 2010

Я предполагаю, что у вас установлено свойство browser.delegate для вашего пользовательского UIViewController. Когда вы нажимаете кнопку «Назад», этот контроллер извлекается из стека навигации и освобождается, в результате чего ваш browser.delegate указывает на освобожденную память. Когда ваша страница завершает загрузку, UIWebView вызывает метод для своего делегата, который больше не существует, поэтому вы получаете EXC_BAD_ACCESS.

Чтобы избежать подобных ошибок, каждый раз, когда вы устанавливаете свойство делегата объекта, убедитесь, что вы установили для этого свойства значение nil в dealloc, например:

- (void)dealloc {
    self.browser.delegate = nil; // Prevents EXC_BAD_ACCESS
    self.browser = nil; // releases if @property (retain)
    [super dealloc];
}

Поскольку nil молча глотает все полученные сообщения, это предотвратит вашу EXC_BAD_ACCESS.

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