CoreData 获取所有关系属性为真的地方

Posted

技术标签:

【中文标题】CoreData 获取所有关系属性为真的地方【英文标题】:CoreData Fetch Where All Relationship Property is True 【发布时间】:2016-02-10 15:51:06 【问题描述】:

我有两个 NSManagedObjects,如下所述。

extension Day 
    @NSManaged var date: NSDate?
    @NSManaged var isHighPriority: NSNumber?
    @NSManaged var projects: NSSet?


extension Project 
    @NSManaged var complete: Bool
    @NSManaged var title: String?
    @NSManaged var day: Day?

我想要做的是获取所有Day 对象,其中所有Projects 都已完成。但是,当我尝试此获取请求时,我收到此错误。 Exception was caught during NSPersistentStoreCoordinator -performBlock: Unsupported predicate

这是我的谓词

let predicate = NSPredicate(format: "isHighPriority == %@ AND ALL projects.complete == TRUE", NSNumber(bool: true))

如何正确获取集合中每个 Project 已完成的所有 Days?我可以获取然后 filter,但我宁愿在 CoreData 级别完成所有操作。

【问题讨论】:

我不完全了解 Swift 对 NSPredicate 语法的修改,但不应该是 YES 而不是 TRUE 产生相同的结果。无效。 【参考方案1】:

我能够通过在NSPredicate 中执行SUBQUERY 来执行此操作

let predicate = NSPredicate(format: "isHighPriority == %@ AND SUBQUERY(projects, $project, $project.complete == TRUE).@count == projects.@count", NSNumber(bool: true))

【讨论】:

以上是关于CoreData 获取所有关系属性为真的地方的主要内容,如果未能解决你的问题,请参考以下文章

CoreData 在一对多关系中编辑一个属性

CoreData:获取具有给定属性和给定关系的对象?

NSPredicate:“添加”一对多关系CoreData中所有实体的属性值

CoraData 获取多个关系

CoreData - 获取 NSManagedObject 的关系子集

CoreData 获取所有一对多关系