我是Core Data的新手,并且在建立查询的正确方法上受挫。

我的受管对象模型包括Apartment,Lease类,以及我称其为JoinTable的联接表。看起来像:

/-----------------\      /-----------------\      /-----------------\
| Apartment       |      | ApartmentLease  |      | Lease           |
|-----------------|      |-----------------|      |-----------------|
| number          |      | startOn         |      | occupantName    |
|-----------------|      | endOn           |      | monthlyRate     |
| apartmentLeases |-\    |-----------------|      | occupantPhone   |
\-----------------/  \->>| apartment       |      |-----------------|
                         | lease           |<<----|apartmentLeases  |
                         \-----------------/      \-----------------/


因此,我试图建模的是一个租赁可以有许多公寓,并且租赁中的每个公寓都有其自己的开始和结束日期。

所以我的问题是:给定一个日期范围,我如何查询Apartment对象并获取在该日期范围内占用该Apartment的所有租赁的数组?

感谢和对不起,我的ASCII艺术糟透了!

伯特

最佳答案

而不是查询Apartment实体,而是查询ApartmentLease实体。

[NSPredicate predicateWithFormat:@"startOn <= %@ && endOn >= %@", referenceDate, referenceDate];


然后,一旦有了ApartmentLease实体数组,就可以通过以下方式检索公寓实体:

NSArray *apartments = [apartmentLeaseArray valueForKeyPath:@"@distinctUnionOfObjects.apartment"];


现在,您有了一系列符合搜索条件的Apartment实体。

更新

如果您已经有该公寓的参考,则只需获取该套公寓的租赁,然后针对该套租赁过滤包含日期的租赁。如果您已经拥有公寓,则没有理由通过NSFetchRequest。将核心数据视为对象图,而不是数据库。所有关系都已经预先填充,您无需获取它们,只需遍历对象图即可。

关于cocoa - 核心数据-遵循关键路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3191227/

10-08 20:51