我在NSFetchedResultsController中遇到了fetchBatchSize的问题,所以我决定退后一步,仅在普通的NSFetchRequest上使用它。我创建了一个非常简单的项目,只包含一个包含100个项目的tableViewController。这些项目只有两个属性,即itemID和itemName。我使用以下方法填充数据数组:

func initializeItems() {
        let request = NSFetchRequest<Item>(entityName: "Item")
        let messageSort = NSSortDescriptor(key: "itemName", ascending: true)
        request.sortDescriptors = [messageSort]
        request.fetchBatchSize = 20
        do {
            let fetchedResults = try context.fetch(request)
            if fetchedResults.count > 0 {
                self.items = fetchedResults
                //self.tableView.reloadData()
            }
        } catch {
            print("Could not fetch \(error)")
        }
    }

这在tableViewController的viewDidLoad中调用。上下文定义如下:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
self.context = appDelegate.persistentContainer.viewContext

当我运行该应用程序时,该表显示所有行都已完全填充(如滚动条所示)。

我不明白为什么fetchBatchSize被忽略。

文档如下:



我可以看到正在加载的故障阵列中的100个项目。但是随后在滚动tableView之前,它会循环5次加载20个项的完整数据。 tableView一次显示大约15行。

我想要的行为是在滚动表时以20个项目的批次加载数据

最佳答案

如文档所示:


fetchLimit是您要寻找的。

10-04 19:33