У меня есть NSCache
, в котором я загружаю и-изображения, которые будут отображаться в виде коллекции. Когда мне нужно перезагрузить данные в виде коллекции, я должен очистить кеш, поскольку в противном случае представление коллекции найдет старые данные и перезагрузит их вместо новых данных.NSCache - не всегда очищается?
Поэтому, прежде чем я перезагружать коллекцию я чищу кеш:
[self.myCache removeAllObjects];
Который иногда не работает, и я до сих пор вижу старые изображения в представлении коллекции. Есть ли другой способ оценить все его ценности и очистить их? Почему это не очищается?
Вот как я загружать и получать изображения от и до:
-(UIImage*) imageForIndexPathRow:(NSNumber *) number
{
return [self.myCache objectForKey:[NSString stringWithFormat:@"cache:%d",[number intValue]] ];
}
-(void) setImage:(UIImage*) image forIndexPathRow:(NSNumber *) number
{
if(image)
[self.myCache setObject:image forKey:[NSString stringWithFormat:@"cache:%d",[number intValue]] ];
}
EDIT: Это, как я проверить кэш, прежде чем загрузить изображение в ячейку (в другом потоке):
UIImage *imageToSet=nil;
UIImage *cacheImg=[self imageForIndexPathRow:[NSNumber numberWithLong:cell.tag]];
if(cacheImg==nil)
{
UIImage *image=[UIImage imageWithData:data scale:1];
imageToSet=image;
//save to cache
[self setImage:image forIndexPathRow:[NSNumber numberWithLong:cell.tag]];
}
else
imageToSet=cacheImg;
вы уверены, что это не проблема с повторным использованием клеток? Я вижу метод, основанный на методе indexpath, поэтому я подозреваю, что вы используете tableview –
Я использую представление коллекции, как я писал в вопросе, но я не думаю, что это так, потому что, когда создается новая ячейка, я загружаю новое изображение в его образ изображения и очистить старый. есть ли что-то, что вы думаете, я могу сделать/проверить, чтобы знать наверняка? – Curnelious
Откуда берутся изображения? Паутина? Кеширование загрузки URL-адресов? – Wain