2011-04-12 23 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