【问题标题】:fetchedResultsController doesn't filter (fetchRequest)fetchedResultsController 不过滤 (fetchRequest)
【发布时间】:2017-03-05 03:10:06
【问题描述】:

我正在尝试获取按其中一个属性(单词)过滤的实体列表,我为此使用了 fetchedResultsController,一切看起来都还不错。该列表已加载并显示在我的 tableView 上,我什至可以对列表进行排序,但是当我尝试使用 predicate 对其进行过滤时,没有任何反应。我不知道我做错了什么。我尝试了苹果网站和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
}()

任何建议将不胜感激!

【问题讨论】:

    标签: ios swift swift3 xcode8


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我解决了这个问题,实际上问题是缓存 cacheName: "TranslationContainers" 。添加过滤代码后它没有更新。我只是更改了缓存的名称并解决了!

      【讨论】:

        猜你喜欢
        • 2017-07-26
        • 1970-01-01
        • 1970-01-01
        • 2017-07-12
        • 2015-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多