2011-04-12 25 views
0

假设我有两个实体:课堂和学生。课堂与学生有多对多的关系。每个学生都有一车(hascar为1)或没有(hascar为0)有关核心数据获取属性的两个基本问题

我想创建课堂几个牵强的属性:

  1. 许多有车的学生
  2. 学生人数

什么让我绊倒是语法。我如何创建一个谓词来检查特定教室中的所有学生?

谢谢!

回答

3

您不需要提取或提取的属性来检查与特定教室相关的所有学生,因为这种关系会自动找到学生。

ClassRoom{ 
    roomNumber:number 
    teacher:string 
    students<-->>Student.classroom 
} 

Student{ 
    name:string 
    classroom<<-->ClassRoom.students. 
} 

假设您有一个特定的ClassRoom对象aClassRoom。关键aClassRoom.students返回所有相关Student对象的NSSet。所有你需要做的就是使用收集操作符来获取你想要的信息。

的学生人数将是简单:

NSNumber *studentCount=[aClassRoom.students valueForKeyPath:@"@count"]; 

学生与汽车数量:

NSPredicate *p=[NSPredicate predicateWithFormat:@"hasCar==1"]; 
NSNumber *withCars=[[aClassRoom.students filteredSetUsingPredicate:p] valueForKeyPath:@"@count"]; 

如果你有关系,你永远不要需要获取找到的东西关于那种关系中的对象。

+0

太棒了。我正在分析这种情况。这正是我需要的。谢谢。 – Chris 2011-04-13 00:37:38

+0

作为一个后续,如果我想在NSPredicate中使用它们来过滤fetchedresultscontroller的结果呢?例如,我可能想要筛选结果并仅显示不是所有学生都有车的教室。 – Chris 2011-04-15 21:14:41

+0

@Chris - 你想要的谓词可能会在学生关系中使用“ANY”操作符。例如:“ANY students.hasCar == 0”将返回所有Classroom对象,其中至少有一名学生没有汽车。 – TechZen 2011-04-18 18:12:05