2010-05-19 31 views
0

我的數據模型中有Customer,Event和Address對象。客戶和地址都與事件有一對多的關係。如何在覈心數據中查詢/過濾多對多關係

我可以得到客戶的活動地址的不同列表通過這樣做:

NSSet *addressSet = [customer valueForKeyPath:@"events.address"]; 

對於UI的一部分,我現在的工作,我需要顯示從最地址最近發生的事件之前有一個地址。

我開始沿着創建一個NSFetchRequest,設置它的實體,排序描述符,謂詞,然後循環遍歷結果的路徑,但它看起來像很多代碼。我是否錯過了一些對Customer對象的「events」關係進行篩選/排序的明顯方式,或者是在創建NSFetchRequest最佳解決方案?

+0

它有助於接受答案(如果你覺得它是正確的:),以便它可以提高你在這裏的聲譽,爲將來的問題。 – 2010-05-20 03:20:31

回答

1

這實際上很簡單,因爲KVO和KVC訪問器可在NSSetNSArray上獲得。

NSSet *eventsWithAddress = [[customer valueForKey:@"events"] filteredSetWithPredicate:[NSPredicate predicateWithFormat:@"address != nil"]]; 
id mostRecentEvent = [eventsWithAddress valueForKeyPath:@"@max.lastDate"]; 

當然的屬性名是由你,因爲我看不到你的數據模型,但是,讓你的其中代碼需要去一個總體思路。你可以看到Apple的文檔中有哪些操作符可用。

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/KeyValueCoding/Concepts/ArrayOperators.html

警告:寫在StackOverflow的評論窗口,讓您將最有可能需要調整有點代碼。

+0

謝謝,這讓我走上正軌。我忘記了filteredSetUsingPredicate。我需要添加到代碼中的是lastDate小於當前日期/時間。 – 2010-05-19 20:47:23