Я использую coredata
. Я успешно добавил изображение в свой coredata
, но проблема, когда я хочу отобразить список. Я получаю эту отстающую проблему, когда прокручиваю вниз по UITableView
. Я прочитал этот пост Loading image from CoreData at cellForRowAtIndexPath slows down scrolling. Я все еще получаю отставание, и теперь я пытаюсь использовать LazyLoadImage
, но проблема в том, что они не используют viewdidload()
. Я не знаю этого LazyLoadImage
. Я хочу узнать больше о Grand Central Dispatch и о том, как это работает.UITableView отставание при загрузке изображения в coredata
Вот мой код.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"imageCell";
NSManagedObject *coreData = [self.devices objectAtIndex:indexPath.row];
ImageCell *cell = (ImageCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[ImageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *imagex = [cache objectForKey:[NSNumber numberWithUnsignedInteger:indexPath.row]];
UIImage * rowImage = [UIImage imageWithData:[coreData valueForKey:@"image"]];
UIImageView * myImage = [[UIImageView alloc] initWithImage:rowImage];
myImage.contentMode = UIViewContentModeScaleAspectFill;
myImage.frame = CGRectMake(0, 0, 79, 56);
cell.name.text = [coreData valueForKey:@"name"];
if (imagex == nil) {
[cache setObject:myImage.image forKey:[NSNumber numberWithUnsignedInteger:indexPath.row]];
imagex = [cache objectForKey:[NSNumber numberWithUnsignedInteger:indexPath.row]];
}
if(imagex){
dispatch_async(dispatch_get_main_queue(), ^{
if ([[tableView indexPathsForVisibleRows] containsObject:indexPath]) {
//check that the relevant data is still required
UITableViewCell * correctCell = [self.tableView cellForRowAtIndexPath:indexPath];
//get the correct cell (it might have changed)
[[correctCell imageView] setImage:imagex];
[correctCell setNeedsLayout];
}
});
}
});
return cell;
}
Имеет ли значение производительность, если я ставлю свой список внутри контроллера? Я не использую xib здесь.
Проблема здесь только первая нагрузка. Когда он прокрутится вниз. Некоторый код знаком. Я пытаюсь решить это самостоятельно, но сейчас не повезло. Я уже читал о важности GCD в нашем приложении. Пожалуйста, помогите мне узнать больше об этом.
ОБНОВЛЕНИЕ Изображения поступали с камеры, которую я снимал. Я думаю, мне нужно изменить его размер.
' self.devices' ваш массив, в котором вы Лоа d tableView? – noobsmcgoobs
@noobsmcgoobs да. это тот, кто хранит список данных из coredata. – user3818576
Насколько велик ваш набор данных? В частности - настолько ли он настолько велик, что вам действительно нужно извлекать данные только тогда, когда вам это нужно, или вы можете хранить его в памяти? – Russell