Это вызывает EXC_BAD_ACCESS? - PullRequest
       13

Это вызывает EXC_BAD_ACCESS?

0 голосов
/ 14 марта 2009

Я получаю EXC_BAD _ACCESS после выхода из метода ниже. В этот момент htmlDocument становится недействительным, что и должно произойти, поскольку он выходит из области видимости. Но вот почему я получаю ошибку? К тому времени, когда загружается contentView (UIWebView), htmlDocument исчезает. Но разве у contentView уже есть то, что ему нужно от loadHTMLString?

- (void)viewDidLoad {
[super viewDidLoad];
//something other processing here

NSString *htmlDocument = [NSString stringWithFormat:@"<html> \n"
"<body>%@</body> \n"
"</html>", aboutContent];
[contentView loadHTMLString:htmlDocument baseURL:[NSURL URLWithString:@"http://www.abc.com"]];  

}

Есть ли лучший способ пройти этот путь до отказа? Выход из этого метода - это конец строки для моего кода. Оттуда SDK.

Ответы [ 5 ]

2 голосов
/ 14 марта 2009

В вашем втором посте закомментированная строка ([кнопка выпуска]) освобождает объект, уже помеченный для автоматического удаления.

Либо удалите «autorelease», где вы делаете alloc для кнопки, либо удалите оператор [button release], чтобы код компилировался без ошибок и исключений.

Если объект помечен для автоматического выпуска, вызов релиза для него будет аналогичен вызову релиза для освобожденного экземпляра, следовательно, ошибка.

1 голос
/ 14 марта 2009

Из вашего примера кода во втором посте кнопка, которую вы отпускаете UIBarButtonItem *button, не сохраняется ничем после того, как вы закомментировали релиз, и поэтому она освобождается.

Вам нужно добавить кнопку в другое представление (используя adSubview), чтобы отобразить ее, и , затем , вы можете отпустить ее. Родительский вид сохранит кнопку.

Конечно, если вы собираетесь снова обратиться к кнопке, ваш контроллер представления должен сохранить удержание и отпустить кнопку на своем месте.

1 голос
/ 14 марта 2009

Вы можете попробовать запустить свое приложение с Guard Malloc на симуляторе, но это не гарантирует, что что-либо появится. Я бы посоветовал вам начать комментировать утверждения, пока не найдете тот, который вызывает ошибку.

1 голос
/ 14 марта 2009

Непонятно, что происходит с фрагментом кода, который вы только что предоставили, без дополнительного контекста. Тем не менее, похоже, что все, что вы хотите сделать, это загрузить некоторый HTML локально в устройстве. Почему бы просто не сделать это?

- (void)viewDidLoad {
    [webView loadRequest:[NSURLRequest 
                          requestWithURL:[NSURL fileURLWithPath:[[NSBundle mainBundle] 
                                                pathForResource:@"help/about.html"
                                                ofType:@"html"]isDirectory:NO]]];
}

Используя эту технику, вы можете создавать документы на основе HTML прямо в своем телефоне, не обращая внимания пользователя на тот факт, что они действительно смотрят на веб-представление: это включает Javascript, CSS, весь шарик воска. Я видел, как люди на самом деле заставляют свои приложения для iPhone выходить в Интернет, просто чтобы отобразить в Интернете статическую страницу, которая на самом деле не нужна.

1 голос
/ 14 марта 2009

С первого взгляда я бы сказал, что в этом коде нет ничего плохого, если предположить, что aboutContent является действительным указателем на объект.

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