2014-01-10 68 views
0

我有兩個實體,學生和課程,每個實體與其他人有一對多的關係(即一個學生有0個或更多的課程,而一個課程有0個或更多的學生)。NSPredicate用於獲取具有某個課程名稱的所有學生嗎?

我需要獲得參加課程的所有學生。我還需要獲取給定學生註冊的所有課程(按姓名)。

一個僞謂詞應該是:所有學生的課程名稱等於courseName

所以我的問題由兩個部分組成:

  1. 什麼是獲得所有學生具有一定的課程名稱有效NSPredicate?
  2. 什麼是有效的NSPredicate用於獲得具有某個firstName的學生註冊的所有課程。

供您參考,這裏有我的實​​體:

enter image description here

+0

在你的NSManagedObject子類中將會有一個'NSSet'屬性,它返回一個課程對象的學生和一個學生對象的課程。 – Akhilrajtr

+0

如果您滿意的任何問題的答案,請註明他們是正確的。 :) – santhu

+0

@santhu會做。需要先嚐試一下。謝謝! – BigSauce

回答

1

1)使用此過濾的students數組,在一個特定的課程與courseName

[NSPredicate predicateWithFormat:@"ANY courses.name like %@", courseName] 

或者,如果您已有course對象(並且name在調用course對象時是唯一的),則ü可以通過訪問其students屬性來獲取所有的學生,即

course.students // returns an NSSet/NSOrderedSet based on your model setup 

2)使用此過濾的courses陣列,其具有一定的firstName學生:

[NSPredicate predicateWithFormat:@"ANY students.firstName like %@", firstName] 

注意: NSSetNSOrderedSet有一個方法array來獲取對象的數組。

另請參閱NSPredicate下的文檔使用帶關鍵路徑的謂詞

1

什麼是有效的NSPredicate以獲得具有某個課程名稱的所有學生?

[NSPredicate predicateWithFormat:@"name= %@", courseName]; 

使用上述謂詞來獲取特定的課程,同時具有名稱= courseName;設置上「課程」實體而不是「學生」實體謂詞。
在執行獲取請求之上時,您將擁有具有該courseName的課程數組。

Course *course = [fetchedResults objectAtIndex:0]; 

我們讓所有的學生在此過程中,

NSArray *students =[course.students allObjects]; 

現在的學生是「學生」實體對象的數組。

同樣, 什麼是獲得其中招收具有一定的firstName學生所有課程的有效NSPredicate。

[NSPredicate predicateWithFormat:@"firstName = %@", name]; 

使用上述謂詞來獲取具有name = firstName的特定學生;在「Student」實體上設置該謂詞。
後以上執行讀取請求時,你將不得不具有的firstName學生的陣列。

Student *student = [fetchedResults objectAtIndex:0]; 

現在把所有的課程爲學生,

NSArray *courses =[student.courses allObjects]; 

現在的課程是「課程」實體對象的數組。

希望這會有所幫助。

相關問題