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
已完成的所有 Day
s?我可以获取然后 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 获取所有关系属性为真的地方的主要内容,如果未能解决你的问题,请参考以下文章
NSPredicate:“添加”一对多关系CoreData中所有实体的属性值