假设我有一个与实体菜单有一对多关系的实体用户,该实体菜单与实体用餐有一对多的关系,与实体配方有多对一关系,实体配方有一对多的关系与实体元素。 我想要做的是选择属于特定用户的元素(用户名= myUsername)和特定菜单 s (minDate< menu.date< maxDate)。
有没有人知道如何获得它们?
由于
答案 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运营商。