我在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
是您要寻找的。