Кэширование SDWebImage работает только в симуляторе

Я использую SDWebImagePrefetcher для предварительной выборки списка изображений из моего plist (около 100, максимальный размер 600 КБ), чтобы сохранить их (возможно, на диске) для последующего использования.

Дело в том, что на симуляторе это работает нормально, а на устройстве загружаются и кэшируются только некоторые из них, и я, честно говоря, не понимаю, почему.

Я знаю это, потому что после их предварительной загрузки я отключаю соединение Wi-Fi и смотрю, правильно ли изображения загружены в imageView (в detailView), и, что удивительно, предварительно загружено только 1\5 изображений, даже если консоль сказала, что это предварительно выбрано торговый центр.

Я пытался поместить в SDWebImagePrefetcher.m в метод startPrefetchingAtIndex: эту строку кода

- (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 для хранения их на диске или как? Я пытаюсь заставить его работать, но каждый раз терплю неудачу.


person Phillip    schedule 03.10.2012    source источник
comment
Поместите оператор журнала в блок отказа вашего setImageWithURL. NSLog(@"%@, error. localizedDescription"); Что-нибудь?   -  person brynbodayle    schedule 05.10.2012
comment
Интернет-соединение отсутствует. Но изображение самого последнего элемента загружается нормально. Без понятия, что это может быть.   -  person Phillip    schedule 05.10.2012


Ответы (1)


Кажется, я нашел проблему.

Я не должен был устанавливать опцию кэширования ( [prefetcher setOptions:SDWebImageMemoryCacheOnly]; ), но мне пришлось оставить ее с низким приоритетом, так что теперь все работает отлично!

person Phillip    schedule 05.10.2012
comment
Я считаю, что это должно быть SDWebImageCacheMemoryOnly вместо SDWebImageMemoryCacheOnly. - person Jayson Lane; 26.11.2014