После многого чтения и рекомендаций я пытаюсь реализовать инфраструктуру SDWebImage в своем приложении. Я могу загружать изображения с сервера, но проблема в том, что, поскольку изображения разных размеров, они не загружаются в том порядке, в котором я их называю (и хотел бы, чтобы они были).загружает изображения с помощью SDWebImage в порядке
Вот основа для справки: https://github.com/rs/SDWebImage
Как вы можете видеть доказательства этого из печати строки:
2013-08-20 11:11:01.785 Project[10785:c07] SD LOAD 1 array count = 1
2013-08-20 11:11:02.668 Project[10785:c07] SD LOAD 0 array count = 2
2013-08-20 11:11:02.946 Project[10785:c07] SD LOAD 3 array count = 3
2013-08-20 11:11:03.306 Project[10785:c07] SD LOAD 2 array count = 4
2013-08-20 11:11:03.862 Project[10785:c07] SD LOAD 4 array count = 5
2013-08-20 11:11:04.094 Project[10785:c07] SD LOAD 5 array count = 6
2013-08-20 11:11:04.793 Project[10785:c07] SD LOAD 6 array count = 7
2013-08-20 11:11:04.837 Project[10785:c07] SD LOAD 7 array count = 8
2013-08-20 11:11:05.046 Project[10785:c07] SD LOAD 8 array count = 9
2013-08-20 11:11:05.428 Project[10785:c07] SD LOAD 9 array count = 10
Ниже мой метод:
-(void)sdWebLoadImages:(NSMutableArray*)imagesURLS{
[_loadedImages removeAllObjects];
NSMutableArray *tempArray = [[NSMutableArray alloc]init];
_loadedImages = tempArray;
for (int i=0;i<imagesURLS.count;i++){
[_manager downloadWithURL:[imagesURLS objectAtIndex:i]
options:0
progress:^(NSUInteger receivedSize, long long expectedSize)
{
// progression tracking code
}
completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType,BOOL finished)
{
if (image && finished)
{
[_loadedImages addObject:image];
NSLog(@"SD LOAD %i array count = %i",i,_loadedImages.count);
}
}];
}
}
Как может Я исправляю это (это что-то в моей логике цикла?). Кроме того, я пытаюсь отменить все загрузки, когда нажата кнопка, и я использую [_manager cancelAll], но, похоже, не работает - любая идея почему?
Спасибо, fam!
ДОБАВЛЕНО:
Сейчас вопрос в том, что менеджер вставляет все кэшированные изображения в массив первых, в результате чего порядок будет нарушен, даже после того, как я установил setMaxConcurrentOperationCount 1. Не уверен, как сохранить загрузка в порядок даже с кешированными изображениями.
Я не знаком с этим каркасом. Если вы используете NSOperationQueue за кулисами, можете ли вы установить его так, чтобы maxOperations = 1? Таким образом, он не будет запускать параллельные операции, но будет выполнять их в том порядке, в котором вы помещаете их в очередь. – Justin
[_manager downloadWithUrl ...] возвращает операцию, которую, я думаю, могу добавить в свою собственную операциюQ, но она срабатывает, когда я пытаюсь сделать это, поэтому я просто избегаю этого в это время ... – royherma