【发布时间】:2010-04-19 14:26:37
【问题描述】:
假设我有一个实体用户,它与实体菜单具有一对多关系,与实体餐具有一对多关系,与具有一对多关系的实体食谱具有多对一关系与实体元素。 我想做的是选择属于特定用户(用户名 = myUsername)和特定菜单s(minDate
有人知道如何获得它们吗?
谢谢
【问题讨论】:
标签: iphone objective-c database core-data
假设我有一个实体用户,它与实体菜单具有一对多关系,与实体餐具有一对多关系,与具有一对多关系的实体食谱具有多对一关系与实体元素。 我想做的是选择属于特定用户(用户名 = myUsername)和特定菜单s(minDate
有人知道如何获得它们吗?
谢谢
【问题讨论】:
标签: iphone objective-c database core-data
您想对元素实体进行提取。根据您的描述,尚不清楚您是否定义了反向关系1(例如元素到接收方)以及它们是对多还是对一。假设您已定义它们并且它们是一对一的,您可以使用 [2] 之类的谓词进行获取:
[NSPredicate predicateWithFormat:@"%@ > recipe.meal.menu.date && recipie.meal.menu.date < %@ && recipie.meal.menu.user.username LIKE[cd] %@", minDate, maxDate, myUsername];
我使用LIKE[cd] 对用户名进行不区分大小写和不区分变音符号的比较。另请注意,Core Data 将日期存储为双精度 NSTimeInterval,没有时区信息。如果您想进行时区敏感的日期比较,则需要做更多的工作。
1如果你还没有定义逆向关系,做吧。正如在其他地方多次说过的那样,Core Data 是一个图形管理框架,恰好能够将其图形持久化到磁盘。如果您定义了反向关系,它将自动为您维护参照完整性,它会在幕后做很多工作。特别是对于多对多关系,Core Data 实际上需要逆向来使事情正常进行。
[2] 如果您在我假设为一的地方定义了多对数的逆,您将不得不使用稍微复杂一点的谓词。例如,第一个子句是
@"ANY (@unionOfSets.recipe.meal.menu.date) < %@"
(最后一点未经测试;KVO 集合运算符对我来说总是有点试验性)。您可以阅读set and array KVO 运算符。
【讨论】:
recipie.@unionOfSets。