iPhone核心数据 - 通过多种关系访问深层属性

时间:2010-04-19 14:26:38

标签: iphone objective-c database core-data

假设我有一个与实体菜单有一对多关系的实体用户,该实体菜单与实体用餐有一对多的关系,与实体配方有多对一关系,实体配方有一对多的关系与实体元素。 我想要做的是选择属于特定用户的元素(用户名= myUsername)和特定菜单 s (minDate< menu.date< maxDate)。

有没有人知道如何获得它们?

由于

1 个答案:

答案 0 :(得分:2)

您想要对元素实体进行提取。根据您的描述,您不清楚您是否定义了反向关系1(例如,元素到收件人)以及它们是多对多还是一对一。假设你已经定义了它们并且它们是一对一的,你可以使用类似[2]的谓词进行提取:

[NSPredicate predicateWithFormat:@"%@ > recipe.meal.menu.date && recipie.meal.menu.date < %@ && recipie.meal.menu.user.username LIKE[cd] %@", minDate, maxDate, myUsername];

我使用LIKE[cd]对usename进行了不区分大小写和不区分大小写的比较。另请注意,Core Data将日期存储为双NSTimeInterval,没有时区信息。如果你想进行时区敏感的日期比较,你需要做更多的工作。

1如果您尚未定义反向关系,执行。正如其他地方多次说过的那样,Core Data是一个图形管理框架,恰好可以将其图形保存到磁盘上。如果您定义反向关系,它将自动执行大量幕后工作以自动维护参照完整性。特别是对于多对多关系,Core Data实际上需要反向来使事情有效。

[2]如果你已经定义了多次反转,我假设为1,你将不得不使用稍微复杂的谓词。例如,第一个条款是

@"ANY (@unionOfSets.recipe.meal.menu.date) < %@"

(这最后一位未经测试; KVO集合运算符总是为我做一些试验)。您可以阅读set and array KVO运营商。