fetchedResultsController没有过滤(fetchRequest)

时间:2017-03-05 03:10:06

标签: ios swift swift3 xcode8

我试图获取按其属性(单词)之一过滤的实体列表,我使用 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
}()

任何建议都会非常感激!

2 个答案:

答案 0 :(得分:3)

NSFetchedResultsController可选地缓存结果,如果您像上面的代码一样更改NSPredicate,缓存内容可能会失去同步。解决此问题的一种方法是在设置新谓词之前删除缓存:

NSFetchedResultsController.deleteCache(withName: "TranslationContainers")
fetchedResultsController.fetchRequest?.predicate = predicate

答案 1 :(得分:0)

我修复了问题,实际上问题是缓存cacheName: "TranslationContainers"。添加过滤代码后,它没有更新。我只是更改了缓存的名称并制定出来了!