在Core Data / Objective-C中有很多关系

时间:2011-01-26 09:22:35

标签: objective-c core-data subquery nspredicate

我正在尝试使用Objective-C重新创建一个has_many:through关系(就像在Rails中一样),如果Core Data由SQLite支持,这一定是可能的吗? <rant>我可以在2秒内为此编写原始SQL ... </rant>

无论如何,基本上这里是我的架构的一个子集:TutorGroup ----&lt;分配&gt; ----类别,我需要获得的是分配给特定教师组的所有类别。

到目前为止,这是我的查询:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(Allocation, $row, $row.tutor_group == %@ AND $row.category == <CURRENT_ROW>).@count > 0)", tutor_group];

有没有办法在子查询中表示当前行的对象(我写的是<CURRENT_ROW>?我尝试过使用self,但这不起作用。

另外,我假设我在哪里放Allocation是我想要执行子查询的表名?

干杯。

2 个答案:

答案 0 :(得分:2)

CoreData中的标准方法是拥有所有反向关系。然后你根本不必使用谓词。

确实建议采用反比关系......请参阅this official document.

假设实体TutorGroup具有多对多关系allocationsAllocation具有一对一关系category。 然后

NSArray* categories = [tutor_group.allocations valueForKeyPath:@"@distinctUnionOfObjects.category"];

请参阅集合运算符here的讨论。

通常,在使用Core Data时,不应使用SQLite支持CoreData的知识。这让你安心。

答案 1 :(得分:2)

我不确定它会起作用,但试试这个:

ANY Allocation.TutorGroup = %@

然后使用predicateWithFormat传入您的教师组,并在Category上运行它。