Apple Lazy Загрузка изображений в навигационный контроллер, возвращается к изображениям-заполнителям - PullRequest
0 голосов
/ 02 сентября 2011

Я реализовал проект LazyTableImages ( ссылка ) от Apple, но в моей версии я использовал RestKit для получения данных, и мой UItableviewcontroller был перенесен в стек навигации.

Так что я отказываюсь от того, что делает яблоко в делегате приложения, чтобы получить xml.Я не думаю, что это проблема.Моя проблема заключается в том, что, когда вы выходите из UITableviewcontroller, используя либо кнопку навигации назад, либо открывая другой элемент панели вкладок и возвращаясь, изображения, которые были загружены туда ранее, отображаются, но сразу же загружается изображение заполнителя.По сути, происходит обратное.

Это похоже на кэшированные данные UITableview, поэтому, когда вы возвращаетесь, это мешает Lazy Table Images.Мне нужно знать, кто-нибудь реализовал этот код, где они должны были отступить?

РЕДАКТИРОВАТЬ:

Похоже, imageDownloader не ноль во второй раз, что препятствует загрузке изображения.Я все еще выясняю, как это обойти.Конечно, я могу просто снять условие, но я не знаю, является ли это «плохим» для производительности.

imageDownloadsInProgress, изменяемый словарь, по-прежнему содержит все свои данные, даже если вы отказываетесь.Теперь это стало другим вопросом, как мне удалить imageDownloadsInProgress, если пользователь наносит ответный удар или отклоняется от текущего представления.

imageDownloadsInProgress сохраняется, но я добавил [релиз imagesDownloadsInProgress] в метод dealloc, однако я не думаю, что он выполняется.

-(void)startEventImageDownload:(WhatsonEvent *)eventRecord forIndexPath:(NSIndexPath *)indexPath
{     

    EventImageDownloader *imageDownloader = [imageDownloadsInProgress objectForKey:indexPath];
    if(imageDownloader == nil)
    {
        NSLog(@"%@",eventRecord.title);
        imageDownloader = [[EventImageDownloader alloc] init];
        imageDownloader.eventRecord = eventRecord;
        imageDownloader.indexPathInTableView = indexPath;
        imageDownloader.delegate = self;
        [imageDownloadsInProgress setObject:imageDownloader forKey:indexPath];
        [imageDownloader startDownload];
        [imageDownloader release];

        [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;

    }
}

Ответы [ 2 ]

1 голос
/ 02 сентября 2011

То, как я это делаю, - это создание собственного кэша и сохранение изображений в каталоге пользовательских документов.Когда я вызываю [tableView reloadData] (вы так называете, верно?), Он сначала проверяет каждую ячейку, есть ли изображение там локально, в противном случае он будет лениво загружать их из канала.Скажите, если вам нужен код для этого.

0 голосов
/ 02 сентября 2011

Проблема заключалась в том, что self.imageDownloadsInProgess = [словарь NSMutableDictionary] был помещен в метод ViewDidLoad с целью сброса словаря каждый раз. Однако, если вы помещаете код в представление, помещаемое в контроллер навигации, ViewDidLoad выполняется только в первый раз (я не уверен, что это так). Я добавил строку в ViewWillAppear, поскольку она запускается каждый раз, когда представление отображается на экране.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...