2015-01-23 5 views
0

В моем приложении iOS я показываю табличное представление с объектами JSON, загруженными с URL-адреса. Теперь tableview прокручивается очень медленно, и при отображении последних строк изображения иногда выходят за пределы контейнера просмотра изображений, выглядя совершенно беспорядочно. Это код внутри метода cellForRowAtIndexPath, который обрабатывает вид изображения внутри клетки:iOS tableview с объектами JSON

 NSMutableString *logo = [[NSMutableString alloc]initWithString:@"http://not shown here"]; 

     NSString *imageURL = [[categorias objectAtIndex:indexPath.row] objectForKey:@"imagen"]; 
     NSLog(@"URL = %@",imageURL); 


     if(imageURL != nil && ![imageURL isEqual:[NSNull null]]) 
     { 
      [logo appendString:imageURL]; 
      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ 
       NSURL *logoURL = [NSURL URLWithString:logo]; 
       NSData *logoData = [NSData dataWithContentsOfURL:logoURL]; 
       dispatch_async(dispatch_get_main_queue(), ^{ 
        if (logoData.length) { 
         cell.imagen_label.image = [UIImage imageWithData:logoData]; 
        }else{ 
         cell.imagen_label.image = [UIImage imageNamed:@"no_image.png"]; 
        } 
       }); 
      }); 
     } 

мне нужна ваша помощь, чтобы улучшить поведение Tableview.

+0

Вы должны заранее получить изображения несколько строк вперед, так что, когда пользователь прокручивает образы, изображения уже загружены. – zaph

+0

Спасибо @Zaph, знаете ли вы учебник, который мог бы мне это сделать? – user3713806

+0

Извините, я всегда писал свои собственные, но ищите изображения, код кеширования, попробуйте CocoaPods, даже если вы не хотите использовать [CocoaPods] (http://cocoapods.org). Я просто искал «кэш изображений» и получил хорошие удары. Первый хит: «FastImageCache: iOS Библиотека iOS для быстрого отображения g изображения при прокрутке "звучит так, как вам нужно, проверьте их, многие выглядят хорошо. – zaph

ответ

0

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

Кроме того, при этой двойной отправке внутренний блок отправки будет сохранять ячейки до тех пор, пока изображение не будет загружено и внутренняя отправка не будет выполнена. Таблица могла бы повторно использовать ячейки для других изображений. Если это произойдет, отображается неправильное изображение. Это будет последний законченный. (Вы можете увидеть это изменить несколько раз, когда прокрутка останавливается.

Есть хорошие примеры на способы, чтобы сделать это в видео для WWDC 2011 сессии 211 "Building Concurrent User Interfaces on iOS"

+0

Ваш ответ очень полезен, спасибо Уолт. – user3713806

Смежные вопросы