2011-03-12 111 views
0

我在我的iPhone應用程序中使用核心數據。訪問核心數據中的多對多關係

我有2個實體:列表和項目,通過多對多的關係鏈接。列表中的關係名稱是項目,而項目中的關係名稱是列表。

我想從用戶選擇的列表中獲取所有項目。

現在我想建立一個謂語這看起來像:

NSPredicate *basePredicate = [NSPredicate predicateWithFormat:@"lists IN %@", listsIds]; 

listsIds是的ObjectID

數組但是當我運行程序我得到這個錯誤:

未實現的SQL生成謂詞:(列表IN {0x594ac10})'

任何想法如何做到這一點?

謝謝!

回答

0

試試這個:

NSPredicate *basePredicate = [NSPredicate predicateWithFormat: 
          @"ALL list.objectID IN %@", listsIds]; 

不知道,如果你需要的ALL所以你也可以試試:

NSPredicate *basePredicate = [NSPredicate predicateWithFormat: 
          @"list.objectID IN %@", listsIds]; 
+0

感謝您的評論。它使事情向前發展,但現在對於這個謂詞,我得到這個錯誤:由於未捕獲的異常「NSInvalidArgumentException」而終止應用程序,原因:'不支持的謂詞(空)' 任何想法? – 2011-03-13 02:23:08

+0

好吧,我已經改變了一下查詢:NSPredicate * basePredicate = [NSPredicate predicateWithFormat: @「ANY lists IN%@」,listsIds];現在看起來工作正常! – 2011-03-13 02:31:14

+0

很高興你有工作:) – David 2011-03-13 12:34:05

1

你甚至需要一個謂語?

如果用戶選擇List對象然後找到相關的Item對象,您只需走List.items關係。

假設您有一個由用戶選擇的List對象的數組。要獲得相關Item對象的數組,只需使用:

NSArray *itemArray=[listArray valueForKey:@"items"]; 

一旦你有一個關係一側的一個對象,你可以找到所有的其他對象,而無需取出。