SDWebImagePrefetcher를 사용하여 나중에 사용할 수 있도록 디스크에 저장하기 위해 내 plist (약 100, 최대 크기 600kb)에서 이미지 목록을 프리 페치합니다.SDWebImage 캐싱은 시뮬레이터에서만 작동합니다.
포인트 이것은 시뮬레이터에서 잘 작동하는 반면, 디바이스에서는로드 중 일부만 캐싱하고 솔직히 이유를 알지 못합니다.
프리 패치를 한 후 WiFi 연결을 해제하고 imageView (detailView)에 이미지가 제대로로드되었는지 확인하고 놀랍게도 프리 페치 된 이미지가 1 \ 5이므로 놀랍습니다. consoloe는 그것들 모두를 선점했다고 말했다.
나는 내 이미지 뷰 클래스의 방법startPrefetchingAtIndex:
에 SDWebImagePrefetcher.m 코드
- (void)startPrefetchingAtIndex:(NSUInteger)index withManager:(SDWebImageManager *)imageManager
{
if (index >= [self.prefetchURLs count]) return;
_requestedCount++;
[imageManager downloadWithURL:[self.prefetchURLs objectAtIndex:index] delegate:self options:self.options];
[cache storeImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[self.prefetchURLs objectAtIndex:index]]]] forKey:[self.prefetchURLs objectAtIndex:index] toDisk:YES];
}
다음의 라인을 넣어 시도 : 구체적인 결과
SDImageCache* cache = [SDImageCache sharedImageCache];
UIImage* cachedImage = [cache imageFromKey:aString fromDisk:YES];
if (cachedImage) {
[imageView setImage:cachedImage];
}
else{
[imageView setImageWithURL:[NSURL URLWithString:anUrl]
placeholderImage:nil options:SDWebImageProgressiveDownload
success:^(UIImage *image) { [activityIndicator stopAnimating];[activityIndicator removeFromSuperview]; }
failure:^(NSError *error) { [activityIndicator stopAnimating];[activityIndicator removeFromSuperview]; }];
[imageView addSubview:activityIndicator];
}
. 항상 장비가 아닌 시뮬레이터에서 작업합니다. 내가 여기서 뭔가를 놓치고 있니? SDWebImagePrefetcher에 캐싱 메서드를 넣어 디스크에 저장해야합니까? 나는 그것을 작동 시키려고 노력하고 있지만 매번 실패하고있다.
setImageWithURL의 실패 블록에 log 문을 넣으십시오. 'NSLog (@ "% @, 오류. localizedDescription"); 뭐든지? – brynbodayle
"인터넷 연결이 오프라인 인 것 같습니다." 하지만 마지막 항목의 이미지가 잘로드됩니다. 그것이 무엇인지에 관해서는 아무 생각이 없습니다. – Phillip