如何在不一次获取所有核心数据的情况下有效地从下至上显示collectionView?

时间:2018-08-25 09:34:44

标签: swift core-data uicollectionview swift4

我有一个聊天应用程序。我正在使用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。由于发送和接收消息,消息列表会不断更新。

0 个答案:

没有答案