首页 > 解决方案 > 如何在 Core Data 的 NSFetchedResultsController 中使用缓存

问题描述

我正在我的viewDidLoad方法中执行此代码

fetchedResultCont = NSFetchedResultsController(fetchRequest: req,
 managedObjectContext: container.viewContext,
 sectionNameKeyPath: nil,
 cacheName: nil)

文档说我们可以使用缓存来加快进程,但没有实现。

谁能告诉我,如何在缓存名称中使用缓存代替 nil 来加快处理速度?

标签: iosswiftnsfetchedresultscontroller

解决方案


您只需指定将用作缓存目录名称的字符串。

fetchedResultCont = NSFetchedResultsController(fetchRequest: req,
     managedObjectContext: container.viewContext,
     sectionNameKeyPath: "SectionKey",
     cacheName: "MyCache")

但是,由于您没有在 fetch 请求中使用部分,因此缓存不会使您受益:

文档

接收方应使用的缓存文件的名称。传递 nil 以防止缓存。

预先计算的部分信息被缓存到此名称下的私有目录中。如果 Core Data 找到一个使用这个名字存储的缓存,它会检查它是否匹配 fetchRequest。如果是,则直接加载缓存——这避免了计算节和索引信息的开销。如果缓存的信息与请求不匹配,则缓存被删除并在获取发生时重新计算。


推荐阅读