2010-02-24 53 views
20

在我的核心數據模型中,我有兩個實體:List和Patient。列表有一個名爲'name'的屬性。核心數據多對多關係 - 謂詞問題

列表可以有任意數量的患者,每個患者可以屬於任意數量的不同列表。因此,我在名爲「患者」的名單上建立了一種關係,該關係與患者具有逆多關係,並且與名爲「名單」的患者之間的關係與名單具有多對多關係。

我在努力解決的是如何創建一個謂詞,它將選擇屬於特定列表名稱的所有患者。

我該怎麼辦?我之前從未在Core Data中使用關係。

感謝,

回答

14

這似乎工作確定:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lists == %@)", myList]; 

凡myList中是一個實際的名單實體。

+0

感謝Garry,我一直在尋找此解決方案一段時間,原來是容易:P – Nick 2010-08-26 22:16:42

9

這聽起來像你的數據模型是這樣的:

名單< < - >>患者

我認爲,如果你知道特定列表的名稱,那麼你就知道特定的列表對象。如果是這樣,您可以使用從列表到患者的多對多關係來抓取患者 - 這是一組患者對象。例如,如果從列表到患者的關係被命名爲「病人」:

NSSet *patientSet = listObject.patients; 

注:這需要您爲管理對象的子類,所以你可以在你的對象訪問屬性和關係的性質。

如果因爲某種原因只知道列表名稱,並且您正在獲取Patient對象,則可以使用Patient to List中的一對多關係創建謂詞(假定它被命名爲「lists」,並且列表的名稱在一個名爲 「LISTNAME」)字符串:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY lists.name == %@",listName]; 
+4

在第一個示例中(gerry3的正常情況),您可以通過KVC訪問它,而不必使用'NSSet * patientSet = [listObject valueForKey:@「patients」];' – 2010-02-24 19:50:18

+2

對其進行子類化處理。 「轉換」爲Fetched結果控制器?我也有同樣的問題,我有「列表」對象的引用,但我想有一個提取的結果控制器顯示「列表」。病人「 – Nick 2010-08-26 22:15:28

+0

其實從來沒有說過,下面的@Garry的回答是我正在尋找的內容 – Nick 2010-08-26 22:17:10

18

如果有一個數據模型,如:

名單< < - >>患者,

你可以找到屬於同一個列表中的所有病人情況特別拉爾名稱使用謂詞像病人實體爲獲取請求:

[NSPredicate predicateWithFormat:@"ANY lists.name LIKE[cd] %@", listName] 

假設listNameNSString實例與你想要的列表名稱。 LIKE[cd]不區分大小寫和區分大小寫不敏感的比較。

+0

我在內存中有List實體,並將它傳遞給UITableViewController子類。我將如何構造一個獲取請求以從該列表實體中獲取所有患者?我正在嘗試使用NSFetchedResultsController,並且列表的名稱不是唯一的(因此,僅根據名稱構造謂詞可能會導致錯誤)。 – Garry 2010-02-28 13:04:59