Core Data谓词基于两个关系属性进行提取

时间:2017-07-06 12:22:37

标签: ios swift core-data

我有两个简单的实体:

Part {
    @NSManaged var states: Set<PartState>  
}

PartState {
    @NSManaged var date: Date
    @NSManaged var state: Int
}

我想从Part获取这些实体,最新的PartStatestate == 1

我试图创建NSPredicate

  • NSPredicate(format: "SUBQUERY(states, $s, $s.date == max($s.date) AND $s.state == 1).@count > 0")

    看起来max($.date)检查所有现有的PartState实体,而不仅仅是那些属于给定Part的实体,并且始终返回1或0个结果。

  • NSPredicate(format: "ANY (states.state == 1 AND states.date == states.@max.date)")

    失败:Unable to parse the format string...

  • NSPredicate(format: "ANY states.state == 1 AND ANY states.date == states.@max.date")

    返回有状态== 1的所有实体(这是我所期望的)。

我想到的唯一其他解决方案是在Part中使用newestState属性,但我仍然在寻找一些基于NSPredicate的方法。

1 个答案:

答案 0 :(得分:0)

您可以使用排序描述符基于日期获取最新条目 并将谓词应用于fetch有状态== 1

let fetchRequest = NSFetchRequest<Part>.init(entityName: "Part")
fetchRequest.sortDescriptors = [NSSortDescriptor.init(key: "states.date", ascending: false)]

 let predicate = NSPredicate.init(format: "states.state = %@","1")