2015-06-19 2 views
0

tablview ячейка будучи установки, используя следующий код ...Почему мой TableView поволноваться, когда я прокручиваю

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


    MyTableviewcell *cell = [tableView dequeueReusableCellWithIdentifier:@"mytableviewcell" forIndexPath:indexPath]; 

    cell.titleLabel.text = [self.data[indexPath.row] objectForKey:@"node_title"]; 
    cell.taxonomy1Label.text = [self.data[indexPath.row] objectForKey:@"group"]; 


    @try { 
     NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[self.data[indexPath.row] objectForKey:@"image"]]]; 
     cell.thumbnailImageView.image = [UIImage imageWithData:imageData]; 

    } 
    @catch (NSException * e) { 
     NSLog(@"Exception: %@", e); 
    } 

    return cell; 
} 

try/catch только потому, что он может или не может иметь изображение, но это происходило еще до того, Я вложил это. Кажется, что есть какая-то проблема, когда он переходит к деактивации ячейки. Есть идеи?

+1

[Данные NSDataWithContentsOfURL:] вызывает задержку. Вы должны сделать это в фоновом потоке. –

ответ

0

Если вы знакомы с использованием библиотеки сторонних разработчиков или CocoaPods, но это общая проблема, и я рекомендую использовать https://github.com/rs/SDWebImage или https://github.com/AFNetworking/AFNetworking, которые имеют методы категории UIImageView для обработки загрузки изображений с URL в фоновом режиме, и не в основной теме.

Например, используя SDWebImage:

[cell.thumbnailImageView sd_setImageWithURL:yourImageURL]; 

Этот метод будет получать изображение в фоновом режиме, не блокируя основной поток и не сделает вашу UITableView джиттера.

-1

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

0

Как уже упоминалось, этот вызов блокирует основной поток:

NSData *imageData = [NSData dataWithContentsOfURL:[NSURL URLWithString:[self.data[indexPath.row] objectForKey:@"image"]]]; 

Что не было уже упомянуто это правильный способ справиться с этой работой.

Вы не можете просто обернуть вышеуказанное в вызове GCD и ожидать, что все будет в порядке.

Вам нужно ленить загружать изображения и заполнять их на столеПросмотр, если это необходимо.

Самый элегантный способ справиться с этим - написать свой собственный NSOperation.

Here - это учебное пособие, любые дополнительные вопросы дайте мне знать.