- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想了解为什么 fetchBatchSize 无法与 NSFetchRequest 一起正常工作。
在初始获取时,加载故障数组后,数据数组将按batchSize循环加载,直到加载所有数据,而不是只加载所需的数据。使用 coreData 工具或编辑运行方案可以清楚地显示在批量大小项目数的循环中加载的所有项目数据,直到加载所有数据,而不是仅加载 tableView 中出现的那些行的数据。
预期结果:
预计故障数组中的所有项目都会被加载,然后仅加载第一批数据。
实际结果:
所有项目都加载到故障数组中,然后在任何滚动之前以批量大小的循环批处理加载所有数据。
这是我创建的示例项目 viewController 来演示这一点:
import UIKit
import CoreData
class BatchTestTableViewController: UITableViewController {
var context: NSManagedObjectContext!
var items: [Item]?
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(UINib(nibName: "BatchTableViewCell", bundle: nil), forCellReuseIdentifier: "BatchTableViewCell")
let appDelegate = UIApplication.shared.delegate as! AppDelegate
self.context = appDelegate.persistentContainer.viewContext
self.initializeItems()
if items != nil {
if items!.count == 0 {
for i in 0..<10000 {
let entityDescription = NSEntityDescription.entity(forEntityName: "Item", in: context)
let item = Item(entity: entityDescription!, insertInto: self.context)
item.objectId = UUID().uuidString
item.itemId = UUID().uuidString
item.itemName = "\(i)"
}
try? context.save()
self.initializeItems()
}
}
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if items != nil {
return items!.count
}
return 0
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "BatchTableViewCell", for: indexPath) as! BatchTableViewCell
let item = self.items![indexPath.row]
cell.itemNameLabel.text = item.itemName
return cell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 50
}
// MARK: - Helper Methods
func initializeItems() {
let request = NSFetchRequest<Item>(entityName: "Item")
let messageSort = NSSortDescriptor(key: "itemName", ascending: true)
request.fetchBatchSize = 20
request.sortDescriptors = [messageSort]
do {
self.items = try context.fetch(request)
} catch {
print("Could not fetch \(error)")
}
}
}
这是从 CoreData Instruments 读取的数据:
从上面的 coredata Instrument 图像中可以看出,所有数据都以 20 个批量大小的循环加载,直到在 tableView 滚动之前加载所有 10,000 个项目。
最佳答案
fetchBatchSize
不会限制您的数据获取。在您的情况下,它使 fetchRequest
能够批量获取 20 个数据。您可以使用此功能来限制应用程序中的工作数据集。与 fetchLimit 结合使用,您可以创建任意结果集的子范围。您应该一起使用fetchLimit
request.fetchLimit = 20
When the fetch is executed, the entire request is evaluated and the identities of all matching objects recorded, but only data for objects up to the batchSize will be fetched from the persistent store at a time. The array returned from executing the request is a proxy object that transparently faults batches on demand. (In database terms, this is an in-memory cursor.)
关于ios - fetchBatchSize 不适用于 NSFetchRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51228685/
我想使用 iOS10 中引入的新核心数据 API。 @available(iOS 10.0, *) open class func fetchRequest() -> NSFetchRequest 我
使用此函数对表格 View 中的单元格进行排序。我的获取请求中出现错误。 do 循环内的行 notes = try context.fetch(request) 导致错误,请求带有下划线 错误显示“无
我的核心数据模型中有一个名为 Task 的实体。 Task 实体有一个名为 date 的可转换属性。 date 属性的类是一个名为 TDate 的类(它符合 NSCoding,因此是一个可转换的属性)
使用 NSFetchedResultsController 和 NSFetchRequest 可以设置返回每个属性中最高值的查询。 例如: Entity_001 A=F B=27 C=57 Entit
我有两个实体:Patient 和 Job。患者与作业具有一对多关系,称为“作业”,而作业与患者具有一对一关系,称为“患者”。作业具有名为“dueDate”(日期)和“已完成”(BOOL)的属性,而患者
如果不提供 NSSortDescriptor,我们就无法使用 NSFetchRequest。我想要做的就是获取结果并按创建顺序显示它们。有没有内置的方法可以做到这一点?或者我必须创建一个新的“自动增量
我必须为我的 iPhone 应用程序创建一个 NSFetchRequest,它返回与以下 SQL 语句相同的结果: SELECT week , year , SUM(durat
我在 MacOsX 10.6 上使用 SQL 存储时遇到了 CoreData 的奇怪问题。我有一个NSManagedObject子类名为 Family具有属性 name和关系personList连接到
我的数据模型如下:类别 —>名字 —>items(“汽车”类型的项目数组) 我正在尝试获取部分作为名称,行应该是项目(这是一个 NSArray) 这是我的代码,我期望将行作为 Car 返回,但它仍然返
我有一个数据列表,其中父子层次结构最多为三个级别。例如 项目A(祖 parent ) 项目B1(父级) 项目C1(子级) 项目C2(子级) 项目C3(子级) 项目B2(父级) 项目C4(子级) ...
当从核心数据库获取数据并同时更新同一实体的数据时,fetchRequest 返回 nil let fetchRequest = NSFetchRequest(entityName: "Abc")
我有下面的方法,我通过 NSDate() 来获取今天的所有结果。我试图在午夜到午夜之前得到结果,但似乎不起作用。我注意到我的谓词输出如下: "date >= CAST(460249200.000000
我试图在 tableView 中显示项目,但我的 fetchResult 数组没有显示任何内容。我得到这个 NSLog: 2013-09-13 13:02:01.088 Prototype[67018
关于这个问题,我正在回答我自己的问题。在我看到尽可能多的其他答案之前,我不会接受它。 在过去的几天里,我一直在努力处理下面的代码 - (id)fetchUniqueEntity:(Class)enti
我有一个 Student 实体,它有一个 dateOfBirth 属性。 我想从 Student 实体中获取所有 Students,按出生日期的升序排列,但按月份的降序排列。 例如:属于同一月份的学生
我是 CoreData 的新手,正在尝试编写一个通用函数来查询数据库中的信息。我遇到了一些问题。 我设置了一个名为 NSError *error 的私有(private)变量。我的代码如下所示: @i
我正在使用自定义源表达式 NSExpression(format: "FETCH(FUNCTION($manager, \"customFetchRequestForSourceEntityNamed
我有一个 NSFetchRequest(在 NSFetchedResultsController 中执行)用于以下数据: Person (one-to-many) Encounter Encounte
我的程序有一个带有两个相关表的 sqlite 数据库。一个称为“排名”,另一个称为“要求” 我想从“Requirement”表中获取与“Rank”表中的特定行有关系的所有行。以下是我的代码,它获取整个
我已经就与此相关的不同事情发布了类似的问题,但已经为此苦苦挣扎了大约一周,但无济于事。这一切都归结为这段代码: NSFetchRequest *oldFetchRequest = [[NSFetchR
我是一名优秀的程序员,十分优秀!