EXC_BAD_ACCESS при удалении вида - PullRequest
0 голосов
/ 25 марта 2011

У меня проблема с EXC_BAD_ACCESS.

У меня есть UIWebView, который загружает локальный HTML-файл, и, поскольку приложение загружает содержимое представления, я отображаю UIView поверх него в виде "заставки"».Затем, когда содержимое UIWebView загружено, я запускаю анимацию, чтобы затемнить UIView и удалить его из памяти.

- (void) webViewDidFinishLoad:(UIWebView *)webView {
        [UIView animateWithDuration:1
                 animations:^{
                      loadingView.alpha = 0.0;
                 }
                 completion:^(BOOL finished){
                     [loadingView removeFromSuperview];
                     [loadingView release];
                 }];
}

Проблема заключается в том, что при использовании моего приложения происходит сбой на двух линияхв рамках метода завершения.Полная ошибка:

Program received signal:  “EXC_BAD_ACCESS”.
warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.3 (8F190)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found).

Представление загрузки создается через построитель интерфейса.Вот иерархия:

image

Ответы [ 2 ]

1 голос
/ 25 марта 2011

Похоже, вы дважды отпускаете представление.

Ваше суперпредставление будет содержать ссылку на ваше изображение-заставку.Это будет выпущено, когда вы removeFromSuperview.

Если это единственная ссылка на изображение-заставку, то следующая строка, релиз, выйдет на over -релиз и вызовет сбой,Судя по приведенному вами коду, решение состоит в том, чтобы удалить явный выпуск.

Однако, если кода больше, чем вы показали, он может быть немного более сложным, хотя и с той же идеей.

0 голосов
/ 25 марта 2011

исключение может быть вызвано выпуском, если вы ранее не сохраняли loadView.

Если вы не сохраните (например, со свойством retain), вам не разрешат освободить представление.

Но чтобы избежать утечки, вы должны дважды проверить, можно ли просто удалить [loadingView release].

...