2

SDWebImagePrefetcher を使用して、plist から画像のリスト (約 100、最大サイズ 600kb) をプリフェッチし、後で使用できるように (ディスク上に) 保存します。

ポイントは、シミュレーターではこれが正常に機能しているのに対し、デバイスではそれらの一部のみをロードしてキャッシュしているということです。正直なところ、その理由はわかりません。

それらをプリフェッチした後、WiFi接続をオフにして、画像が(detailViewの)imageViewに正しくロードされているかどうかを確認し、驚くべきことに、コンソールがプリフェッチしたと言ったとしても、プリフェッチされた画像は1 \ 5しかないため、これを知っていますモール。

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];

}

そして私のimageViewクラスで:

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にキャッシュメソッドを配置する必要がありますか? 私はそれを機能させようとしていますが、毎回失敗しています。

4

1 に答える 1

1

問題が見つかったようです。

オプションをキャッシュ ( [prefetcher setOptions:SDWebImageMemoryCacheOnly];) に設定するべきではありませんが、優先度を低くしておく必要があったため、すべてが完全に機能するようになりました!

于 2012-10-05T19:07:52.873 に答える