我很新的Objective-C,所以希望這一切都有道理。我從服務器下載了圖像,並在collectionView cellForItemAtIndexPath:
方法的圖像視圖中顯示了它們。我面臨的問題是圖像看起來不是緩存。它看起來像每次單元被重用時,服務器的相關圖像正在被重新下載。緩存圖像和UICollectionView
在我viewDidLoad方法中,我創建的NSMutableDictionary:
imageDictionary = [[NSMutableDictionary alloc]initWithCapacity:50.0];
從閱讀文件和尋找答案我認爲這類似的問題,再加上下面的代碼就足夠了。我已經在這裏待了幾天,我知道我缺少一些東西,或者我沒有抓住一個概念。
#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;
}
任何幫助將不勝感激。提前致謝。
看起來您每次都會重新下載圖像。 collectionview不會爲您緩存圖像。您需要創建自己的字典進行緩存。看看NSCache。 – yuf
@yuf會做 - 謝謝! – BrianS