Ios 核心数据的FetchResults中的谓词无效

Ios 核心数据的FetchResults中的谓词无效,ios,core-data,swift3,Ios,Core Data,Swift3,我有一个核心数据应用程序,基本上用于检索数据,但当我应用谓词时,没有过滤。换句话说,无论使用何种过滤器,都会返回相同的结果。有什么建议吗 lazy var frc: NSFetchedResultsController<Report> = { let context = self.app.persistentContainer.viewContext let req: NSFetchRequest<Report> = Report

我有一个核心数据应用程序,基本上用于检索数据,但当我应用谓词时,没有过滤。换句话说,无论使用何种过滤器,都会返回相同的结果。有什么建议吗

lazy var frc: NSFetchedResultsController<Report> =
    {
        let context = self.app.persistentContainer.viewContext

        let req: NSFetchRequest<Report> = Report.fetchRequest()
        req.fetchBatchSize = 20


        let sortDescriptor = NSSortDescriptor(key: "status", ascending:true)
        req.sortDescriptors = [sortDescriptor]

        let filter = self.app.currentFilter
        //print(filter!)
        let predicate = NSPredicate(format: "status == %@", filter)
        req.predicate = predicate

        let afrc = NSFetchedResultsController(fetchRequest: req, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: "reports")
        afrc.delegate = self
        do
        {
            try afrc.performFetch()
        }
        catch
        {
            fatalError("Abort while fetching report")
        }
        return afrc
}()
惰性变量frc:NSFetchedResultsController=
{
让context=self.app.persistentContainer.viewContext
let req:NSFetchRequest=Report.fetchRequest()
req.fetchBatchSize=20
让sortDescriptor=NSSortDescriptor(键:“状态”,升序:true)
req.sortDescriptors=[sortDescriptor]
let filter=self.app.currentFilter
//打印(过滤器!)
let谓词=NSPredicate(格式:“状态==%@”,筛选器)
req.谓词=谓词
让afrc=NSFetchedResultsController(fetchRequest:req,managedObjectContext:context,sectionNameKeyPath:nil,cacheName:“报告”)
afrc.delegate=self
做
{
试试afrc.performFetch()
}
抓住
{
fatalError(“提取报告时中止”)
}
返回afrc
}()

报告实体的status属性是一个
字符串

继上面的两条注释之后,答案可能在中。阅读修改获取请求一节,特别注意


您不能简单地更改fetch请求来修改结果。

在上面的两条注释之后,答案可能在中。阅读修改获取请求一节,特别注意


您不能简单地更改fetch请求来修改结果。

查看您的行
//print(filter!)
,我想您知道这个惰性getter代码只运行一次。之后您是否要更改
过滤器
?这就是你得到意想不到的结果的时候吗?是的。我也尝试过使用静态字符串。我可能已经解决了我的问题,但现在我正试图弄清楚为什么我解决了它。我向模型中添加了一个关系,现在谓词正在工作,但该关系不在谓词筛选器项上,并且我没有更改上述代码。查看您的行
//print(filter!)
,我想您知道此惰性getter代码只运行一次。之后您是否要更改
过滤器
?这就是你得到意想不到的结果的时候吗?是的。我也尝试过使用静态字符串。我可能已经解决了我的问题,但现在我正试图弄清楚为什么我解决了它。我在模型中添加了一个关系,现在谓词正在工作,但是关系不在谓词过滤器项上,我也没有更改上面的代码。这基本上回答了问题,但我仍然在努力。我得到的结果不一致。在一个地方,我可以修改请求(在我重新阅读文档之前),到目前为止,它运行良好。我还是缺少一些东西。在该文档中,它似乎指出,如果您不使用缓存,您应该能够随意更改获取请求。我将缓存名称更改为nil,但结果与我预期的不完全一样。也许您正在一个“工作正常”的地方执行performFetch(),我想再次指出,您发布的所有代码,{…}()之间的所有内容都是一个闭包,在封闭对象/类的生命周期中最多运行一次,初始化frc。因此,修改获取请求必须在别处。这基本上回答了问题,但我仍在努力。我得到的结果不一致。在一个地方,我可以修改请求(在我重新阅读文档之前),到目前为止,它运行良好。我还是缺少一些东西。在该文档中,它似乎指出,如果您不使用缓存,您应该能够随意更改获取请求。我将缓存名称更改为nil,但结果与我预期的不完全一样。也许您正在一个“工作正常”的地方执行performFetch(),我想再次指出,您发布的所有代码,{…}()之间的所有内容都是一个闭包,在封闭对象/类的生命周期中最多运行一次,初始化frc。因此,修改提取请求必须在别处。