Изображения из URL (RSS Reader) отображаются в виде таблицы - проблема - PullRequest
0 голосов
/ 28 мая 2011

У меня проблема с табличным представлением и некоторыми пользовательскими ячейками. Вот мой код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"cellForRowAtIndexPath");
static NSString *MyIdentifier = @"customCell";

EventTableCell *cell = (EventTableCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if (cell == nil) {
    //cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:MyIdentifier] autorelease];
    [[NSBundle mainBundle] loadNibNamed:@"EventTableCell" owner:self options:nil];
    cell = self.eventCell;
}

//Set up the cell
int storyIndex = [indexPath indexAtPosition: [indexPath length] - 1];
[[cell eventNameLabel] setText:[[stories objectAtIndex: storyIndex] objectForKey: @"title"]];
[[cell eventDateLabel] setText:[[stories objectAtIndex: storyIndex] objectForKey: @"date"]];

NSString * storyLink = [[stories objectAtIndex: storyIndex] objectForKey: @"link"];

// clean up the link - get rid of spaces, returns, and tabs...
storyLink = [storyLink stringByReplacingOccurrencesOfString:@" " withString:@""];
storyLink = [storyLink stringByReplacingOccurrencesOfString:@"\n" withString:@""];
storyLink = [storyLink stringByReplacingOccurrencesOfString:@"  " withString:@""];

//NSString *string = [[NSString alloc] stringWithString:[[stories objectAtIndex: storyIndex] objectForKey: @"link"]];
NSURL *url = [NSURL URLWithString:storyLink];
NSData *data = [[NSData alloc] initWithContentsOfURL: url];
UIImage *image = [UIImage imageWithData: data];
[[cell eventImage] setImage:image];

return cell;
}

В моей таблице много этих пользовательских ячеек, больше, чем может показать представление одновременно. Поэтому мне нужно прокрутить вверх / вниз, чтобы увидеть все ячейки. Моя проблема в том, что когда я прокручиваю, он сильно отстает, и в консоли отладчика он вызывает cellForRowAtIndexPath, когда каждая новая ячейка попадает в представление. Каждая ячейка содержит изображение, которое загружается с URL-адреса и, следовательно, должно быть преобразовано в UIImage. Я полагаю, что это вызывает отставание.

Кто-нибудь может подсказать мне, что мне нужно сделать, чтобы загрузить изображения и отобразить их в ячейках, не вызывая значительного отставания в приложении?

IE: куда бы я поместил код загрузки / конвертации, чтобы изображение уже сохранялось как изображение, прежде чем ячейка будет отображена?

Спасибо

Jack

1 Ответ

2 голосов
/ 28 мая 2011

Если вы хотите предварительно загрузить изображения, вы можете сделать это в любой момент в вашем приложении и кэшировать их на потом.Например, вы можете начать загрузку сразу после загрузки и анализа RSS-канала.Вы можете сохранить их в каталоге, возвращаемом [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0].Было бы лучше использовать асинхронный метод для их загрузки и иметь всего несколько активных загрузок одновременно для лучшей производительности.

Если вы хотите загружать их по мере необходимости, установите изображение-заполнитель при выделении ячейкии используйте асинхронное NSURLConnection или подобное для загрузки.После завершения загрузки замените заполнитель реальным изображением (и, конечно, кешируйте его для повторного использования позже).

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