2017-07-06 98 views
0

的我有兩個簡單的實體:核心數據謂詞來獲取基於兩個關係的屬性

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)[email protected] > 0")

    它看起來像max($.date)檢查所有現有PartState實體,而不僅僅是那些屬於給定Part,總是返回1分或0的結果。 Unable to parse the format string...

  • NSPredicate(format: "ANY states.state == 1 AND ANY states.date == [email protected]")

    返回有過狀態== 1(這是我所期望的)的所有實體:

  • NSPredicate(format: "ANY (states.state == 1 AND states.date == [email protected])")

    與失敗。

這使我心中唯一的其他的解決辦法,是讓newestState財產部分,但我仍然在尋找一些基於NSPredicate路。

回答

0

可以使用排序描述 獲取基於日期最新的入門和應用謂詞來獲取具有狀態== 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") 
+0

我認爲這將返回我曾經有過狀態的部分== 1 States屬性設置爲幷包含狀態更改的歷史記錄。我想要獲取當前(最新)狀態== 1的所有部件。 – tzaloga