Форум программистов, компьютерный форум CyberForum.ru

Как сделать асинхронную загрузку картинок в UITableView не останавливая главный поток? - Objective-C

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Objective-C Странное поведение id типа http://www.cyberforum.ru/objective-c/thread1284560.html
Итак имеем код статического метода, который возвращает нетипизированный указатель @implementation ViewController +(id) newString { return @"Hello world"; } @end
Objective-C Переопределение метода в сабклассе делегата Сабж. Есть класс1, реализует некий метод некого протокола. Как в классе 2(наследник класса1) переопределить этот метод (не считая категории и обьявления протокола класса1 и его реализации в классе2)? Неужели нельзя переопределить просто при насаледовани? http://www.cyberforum.ru/objective-c/thread1284192.html
Objective-C Как сделать адаптацию интерфейса к альбомной ориентации экрана
у меня есть таблица с вот такими UIView в ячейках, как можно сделать чтобы при смене ориентации экрана в альбомную увеличивалась длина UILabel, уменьшалась высота и дата подымалась выше?
Objective-C Где взять ShareKit
Добрый день, где найти актуальный sharekit? Скачал с офф сайта, добавил в проект, вылезла тонна ошибок о использовании release/etc. Нашёл на гитхабе, последнее обновление 2 недели назад, но там тоже non-ARC сообщения (лол). Где взять то?
Objective-C Как полностью убрать прозрачность у statusbar? http://www.cyberforum.ru/objective-c/thread1282286.html
как убрать эту прозрачность у StatusBar? у NavigationBar я убрал прозрачность с помощью: ]; ];
Objective-C Objective-C и разработка Стоит ли мне изучать Objective-C?Если да, то посоветуйте хорошую ГРАФИЧЕСКУЮ среду разработки Objective-C для Windows. подробнее

Показать сообщение отдельно
vitalik_a
4 / 4 / 1
Регистрация: 11.09.2014
Сообщений: 81
27.10.2014, 16:25  [ТС]
Objective-C
1
В главном потоке просто устанавливается imageView.image, а UIActivityIndicatorView убирается.
наверное я не правильно переходил между потоками

в контроллере табличного вида для каждой ячейки я создавал объект модели TeaserItemNewsModel (модель тизера новости) и вызывал метод loadImage

в методе loadImage делал вызов метода в фоновом потоке:
Objective-C
1
[self performSelectorInBackground:@selector(loadImageInBackground) withObject:nil];
в loadImageInBackground синхронный запрос
Objective-C
1
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
и отправку сообщения контроллеру табличного вида о том что картинка загружена
Objective-C
1
[[NSNotificationCenter defaultCenter] postNotificationName:TEASER_ITEM_IMAGE_LOADED_NOTIFICATION object:self];
и контроллер табличного вида услышав сообщение о загрузке картинки должен был отобразить её
до сих пор я для этого использовал:
Objective-C
1
        dispatch_async(dispatch_get_main_queue(), ^{[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:teaserItemNewsModel.indexPath] withRowAnimation:UITableViewRowAnimationNone];});
вот здесь и происходили подёргивания таблицы про скроллинге

Добавлено через 9 минут
сейчас я закомментировал весь приведённый код и в месте где картинка вставляется в UIImageView при формировании ячейки и прямо там сделал асинхронный запрос и вставку картинки
Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if (image == nil)
{
    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:self.imageUrl
                                                    cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData
                                                timeoutInterval:30.0];
    [NSURLConnection sendAsynchronousRequest:urlRequest
                                       queue:[NSOperationQueue mainQueue]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError)
    {
        self.newsImageView.image = [UIImage imageWithData:data];
    }];
}
else
{
    self.newsImageView.image = image;
}
сейчас кажеться работает без подергиваний
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru