Objective-C'ye oldukça yeni geldim, umarım bu her şey anlamlıdır. Görüntüleri bir sunucudan indirdim ve görüntüyü collectionView cellForItemAtIndexPath:
yönteminde görüntüledim. Karşılaştığım sorun, görüntülerin önbelleğe alma gibi görünmemesidir. Her hücre yeniden kullanıldığında, sunucudan gelen görüntü yeniden indiriliyor gibi görünüyor. belgeleri okuyarak ve ben bu düşünce benzer soruların yanıtlarını bakarakBir Görüntü ve UICollectionView öğesinin önbelleğe alınması
imageDictionary = [[NSMutableDictionary alloc]initWithCapacity:50.0];
artı aşağıdaki kod yeterli olacaktır: Benim viewDidLoad yönteminde
Bir NSMutableDictionary yaratıyorum. Birkaç gündür bu işteyim ve eksik olduğum bir şey olduğunu biliyorum.
#pragma mark - UICollectionView Data Source
- (NSInteger)collectionView:(UICollectionView *)view numberOfItemsInSection:(NSInteger)section;{
NSLog(@"Begin retrieving photos");
return [self.photos count];
}
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
return 1;
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath;{
CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"MY_CELL" forIndexPath:indexPath];
cell.imageView.image = nil;
if (cell.imageView.image == nil) {
dispatch_queue_t downloadQueue = dispatch_queue_create("image downloader", NULL);
dispatch_async(downloadQueue, ^{
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:[[self.photos objectAtIndex:indexPath.row] objectForKey:@"fullimage"]]];
UIImage *image = [UIImage imageWithData:data];
[imageDictionary setObject:image forKey:@"Image"];
dispatch_async(dispatch_get_main_queue(), ^{
cell.imageView.image = [imageDictionary objectForKey:@"Image"];
[cell setNeedsDisplay];
});
});
}
return cell;
}
Herhangi bir yardım çok takdir edilecektir. Şimdiden teşekkürler.
Her seferinde görüntüyü yeniden indiriyor gibi görünüyor. Collectionview sizin için görüntüleri önbelleğe almaz. Önbelleğe almak için kendi sözlüğünüzü oluşturmanız gerekir. NSCache'ye bakın. – yuf
@yuf Yapacak - teşekkürler! – BrianS