我试图获取按其属性(单词)之一过滤的实体列表,我使用 fetchedResultsController 来完成该操作并且一切正常。列表已加载并显示在我的tableView上,我甚至可以对列表进行排序,但是当我尝试使用谓词过滤它时,没有任何反应。我不知道自己做错了什么。我尝试了苹果网站和stackoverflow的一些问题,我真的不知道自己做错了什么。
这是 fetchedResultsController
的代码lazy var fetchedResultsController: NSFetchedResultsController<TranslationContainer> = {
let fetchRequest = NSFetchRequest<TranslationContainer>()
let entity = TranslationContainer.entity()
fetchRequest.entity = entity
let predicate = NSPredicate(format: "word == %@", "Bed")// doesn't filter
fetchRequest.predicate = predicate
let sortDescriptor = NSSortDescriptor(key: "word", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]
fetchRequest.fetchBatchSize = 20
let fetchedResultsController = NSFetchedResultsController(
fetchRequest: fetchRequest,
managedObjectContext: self.managedObjectContext,
sectionNameKeyPath: nil,
cacheName: "TranslationContainers")
fetchedResultsController.delegate = self
return fetchedResultsController
}()
任何建议都会非常感激!
答案 0 :(得分:3)
NSFetchedResultsController可选地缓存结果,如果您像上面的代码一样更改NSPredicate,缓存内容可能会失去同步。解决此问题的一种方法是在设置新谓词之前删除缓存:
NSFetchedResultsController.deleteCache(withName: "TranslationContainers")
fetchedResultsController.fetchRequest?.predicate = predicate
答案 1 :(得分:0)
我修复了问题,实际上问题是缓存cacheName: "TranslationContainers"
。添加过滤代码后,它没有更新。我只是更改了缓存的名称并制定出来了!