Асинхронная загрузка с использованием блоков - PullRequest
0 голосов
/ 08 февраля 2012

Следующий код находится в пределах cellForRowAtIndexPath.

1.) Мне нужно изменить этот код так, как я могу, отменить загрузку или блокировать, когда viewDissapears. Я думаю, я должен сначала инициализировать блок в файле .h, а затем использовать его в cellForRowAtIndexPath, а затем установить его в ноль, когда viewDidDissapear. (Я не уверен, что этот подход правильный). Может кто-нибудь помочь мне отредактировать этот код?

примечание: что должно произойти, когда пользователь находится в определенном представлении и когда следующий код загружает некоторые изображения, пользователь решает перейти к другому представлению. Тогда я хочу отменить загрузку в viewDidDissapear метод

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);    
    dispatch_async(concurrentQueue, ^{        
        NSData *image = // I will be downloading an URL here            
        //this will set the image when loading is finished
        dispatch_async(dispatch_get_main_queue(), ^{
          // I will be displaying the Downloaded image here
        });
    });

Ответы [ 3 ]

0 голосов
/ 11 февраля 2012

вы должны посмотреть здесь: http://blog.slaunchaman.com/2011/02/28/cocoa-touch-tutorial-using-grand-central-dispatch-for-asynchronous-table-view-cells/ это определенно то, что вы хотите сделать

0 голосов
/ 11 февраля 2012

Загрузка уже асинхронная, поэтому ее оборачивание в GCD только усложняет ситуацию. Вот загружаемый проект, который вы можете попробовать, который загружает изображения в фоновом режиме и добавляет их в представление таблицы, когда они появляются. Вы можете легко добавить код, который отменяет загрузку при выпуске объекта загрузчика:

https://github.com/mattneub/Programming-iOS-4-Book-Examples/blob/master/p754p772downloader/p754downloader/RootViewController.m

0 голосов
/ 08 февраля 2012

Не следует ждать, пока представление исчезнет, ​​и отмените операцию в методе prepareForReuse ячейки табличного представления. В противном случае вы можете увидеть, что ячейка будет переработана до окончания загрузки (например, потому что пользователь сделал быструю прокрутку), а затем завершенная загрузка покажет неправильный контент, прежде чем правильный перезапишет его. Кроме того, ваш подход выглядит работоспособным.

...