2017-07-06 99 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