gpt4 book ai didi

ios - 使用 NSFetchResultsController 时 UICollectionView 滚动不流畅

转载 作者:行者123 更新时间:2023-11-28 22:07:35 27 4
gpt4 key购买 nike

我正在使用 UICollectionViewNSFetchResultsController 来呈现不同的照片集。这是我第一次同时使用 UICollectionViewNSFetchResultsController

这是我的代码:

- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *cellIdentifier = @"CellIdentifier";
CollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellIdentifier forIndexPath:indexPath];

MyPhoto *myPhoto = [self.fetchedResultsController objectAtIndexPath:indexPath];

cell.imageView.image = [UIImage imageWithData:myPhoto.photoData];

return cell;
}


- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController != nil)
{
return _fetchedResultsController;
}

/*
Set up the fetched results controller.
*/
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

NSManagedObjectContext *moc = [[CoreDataManager sharedInstance] managedObjectContext];

// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyPhoto" inManagedObjectContext:moc];
[fetchRequest setEntity:entity];

// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:40];

// Sort using the timeStamp property.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sectionName" ascending:YES];
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"timeStamp" ascending:YES];
[fetchRequest setSortDescriptors:@[sortDescriptor, sortDescriptor1]];

// Use the folderName property to group into sections.
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:moc sectionNameKeyPath:@"sectionName" cacheName:@"Root"];
_fetchedResultsController.delegate = self;

return _fetchedResultsController;
}

当我有更多部分并尝试 ScrollView 时,它滚动不流畅。我错过了什么吗?

最佳答案

将 NSFetchedResultController 与 TableView 或 CollectionView 一起使用没有区别。

我在你的代码中看到了一些东西-
1) BatchSize:40 - 批处理的大小越大,获取所需的时间就越多。它不会经常获取,但需要更多时间。例如,尝试将其设置为 20。滚动应该是窒息的。

2) 你的实体是照片。
- 确保不要将 BLOB(大数据)存储为值。这会使抓取变慢。如果您需要将图像存储在模型中的 CoreData 集中(存储在外部存储文件中)键。
- 制作图像的缩略图。如果您需要显示小尺寸图像,请制作缩略图并将其直接保存到 CoreData(不要使用“存储在外部存储文件”)键。这个 vill 使抓取速度非常快,因为您不会使用任何外部文件并且照片填充的尺寸很小。
- 预取数据。如果你有一些子实体 if photo 并且你正在使用它们,

NSString *relationshipKeyPath = @"bObjects"; // Set this to the name of the relationship on photo
NSArray *keyPaths = [NSArray arrayWithObject:relationshipKeyPath];
[request setRelationshipKeyPathsForPrefetching:keyPaths];

关于ios - 使用 NSFetchResultsController 时 UICollectionView 滚动不流畅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23556982/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com