我正处于优化核心数据代码的阶段,
我正在创建一个消息传递应用程序,我只想一次加载50条消息。 但是,查看下面的timeprofile数据,fetchrequest会立即加载所有消息。之后,它甚至无需滚动即可以50个批量加载所有消息。所以它甚至没有做任何事情。
非常感谢任何帮助。
lazy var fetchedResultsControler: NSFetchedResultsController = {
let fetchRequest = NSFetchRequest(entityName: "Mesages")
fetchRequest.fetchBatchSize = 20
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "timestamp", ascending: true)]
fetchRequest.predicate = NSPredicate(format: "user.id = %@", self.friend!.id!)
let moc = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: moc, sectionNameKeyPath: nil, cacheName: nil)
frc.delegate = self
return frc
}()
override func viewDidLoad() {
super.viewDidLoad()
do {
try fetchedResultsControler.performFetch()
} catch let err {
print(err)
}
self.fetchData = fetchedResultsControler.fetchedObjects as! [Mesages]}
这是CoreData时间分析数据:
答案 0 :(得分:2)
根据NSFetchRequest
documentation:
执行提取时,将评估整个请求并记录所有匹配对象的标识,但一次只能从持久性存储中提取batchSize对象的数据。从执行请求返回的数组将是一个代理对象,它根据需要透明地对批处理进行故障处理。 (在数据库术语中,这是一个内存中的游标。
相反,如果您希望明确控制提取分组,请改用fetchLimit
和fetchBatchSize
的组合。但那时你正在与NSFetchedResultsController
的特征作斗争。
你真正想用fetchData
数组做什么?