Приложение iPhone падает без уважительной причины? - PullRequest
0 голосов
/ 23 марта 2010

Я занимаюсь разработкой приложения, в котором у меня есть таблица. В ячейке таблицы у меня есть viewview (изображения отображаются через URL) и textview / webview. Я запускаю темы для каждой строки, чтобы получить изображения в

- (UITableViewCell *)tableView:(UITableView *)theTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

метод (если изображение еще не получено) и установить текст textview / webview из массива.

Проблема возникает, когда изображения принимаются, и я открываю представление, приложение вылетает, выдавая следующее сообщение:

bool _WebTryThreadLock (bool), 0x1a0670: Пытался получить веб-блокировку из потока, отличного от основного или веб-потока. Это может быть результатом обращения к UIKit из вторичного потока. Авария сейчас ...

Теперь ситуация становится более странной, если я не выпускаю текстовое / веб-представление, добавленное в ячейку, тогда все работает нормально.

Редактировать: сбоя не происходит, когда я заменяю textview / webview на метку

Надеясь, я ясно в своем вопросе. Если что-то сбивает с толку, пожалуйста, прокомментируйте. Мне нужно решить эту проблему.

Спасибо

Нихилу

1 Ответ

1 голос
/ 23 марта 2010

Это огромная ошибка в использовании потоков. Старайтесь избегать использования потоков, если у вас есть другие решения!

В вашем случае, просто используйте асинхронную NSURLConnection, которая позаботится о загрузке вашего изображения, не замедляя ваше приложение;)

Вот часть кода:

- (void) startDownload {
    self.activeDownload = [NSMutableData data];

    NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:
                             [NSURLRequest requestWithURL:
                              [NSURL URLWithString:@"blablabla"]] delegate:self];
    self.imageConnection = conn;
    [conn release];
}

#pragma mark -
#pragma mark Download support (NSURLConnectionDelegate)

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [self.activeDownload appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"ERROR DOWNLOADING");
    // Clear the activeDownload property to allow later attempts
    self.activeDownload = nil;

    // Release the connection now that it's finished
    self.imageConnection = nil;
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"FINISH DOWNLOAD");

    UIImage *image = [[UIImage alloc] initWithData:self.activeDownload];
    self.activeDownload = nil;
    self.imageConnection = nil;

    //do whatever you want with your image

    [image release];
}
...