我有一个聊天应用程序。我正在使用NSFetchedResultsController显示消息。为了有效地获取大量数据,我正在使用此FRC
let fetchRequest: NSFetchRequest<Messages> = Messages.fetchRequest()
let appDelegate: AppDelegate? = UIApplication.shared.delegate as? AppDelegate
let manageObjectContxt = appDelegate?.persistentContainer.viewContext
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "time", ascending: false)]
fetchRequest.fetchBatchSize = 30
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: manageObjectContxt!, sectionNameKeyPath: nil, cacheName: nil)
但是问题是,collectionView像聊天应用程序一样从底部显示。当消息页面加载并且核心数据performFetch完成时,我将转到消息列表的底部,如下所示:
let lastCellIndex = IndexPath.init(row: self.collectionView.numberOfItems(inSection: 0) - 1, section: 0)
self.collectionView.scrollToItem(at: lastCellIndex, at: .bottom, animated: false)
我觉得它违反了fetchRequest.fetchBatchSize = 30
的全部目的,因为前几条消息已加载,然后滚动到底部。因此,所有消息都立即加载,这在存在大量消息时会导致性能问题。
如何在不一次获取所有核心数据的情况下从下至上显示collectionView?
仅供参考,我正在使用FlowLayout的子类作为collectionViewLayout。由于发送和接收消息,消息列表会不断更新。