ali*_*ego 5 xcode core-data nsfetchrequest ios swift
我在 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)")
}
}
Run Code Online (Sandbox Code Playgroud)
这在 tableViewController 的 viewDidLoad 中调用。上下文定义如下:
let appDelegate = UIApplication.shared.delegate as! AppDelegate
self.context = appDelegate.persistentContainer.viewContext
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,表格显示所有行都已完全填充(如滚动条所示)。
我不明白为什么 fetchBatchSize 被忽略了。
文档如下:
提取请求中指定的对象的批量大小。默认值为 0。批量大小为 0 被视为无限,这将禁用批量故障行为。如果您设置了一个非零的批量大小,则在执行 NSFetchRequest 实例时返回的对象集合将被分成多个批次。执行提取时,会评估整个请求并记录所有匹配对象的身份,但一次只会从持久存储中提取不超过batchSize 的对象的数据。执行请求返回的数组是一个代理对象,它可以按需透明地对批次进行故障处理。(在数据库术语中,这是一个内存中游标。)您可以使用此功能来限制应用程序中的工作数据集。结合 fetchLimit,
我可以看到正在加载的故障数组中的 100 个项目。但随后它会在滚动 tableView 之前循环 5 次加载 20 个项目的完整数据。tableView 一次显示大约 15 行。
我想要的行为是在表格滚动时以 20 个项目批次加载数据
| 归档时间: |
|
| 查看次数: |
617 次 |
| 最近记录: |