2012-02-14 70 views
0

我在CoreData中有三種對象類型; ObjectA,ObjectB和ObjectC。這些對象與一個一對多的關係,這樣的關係:NSFetchedResultsController按一對多關係排序

[ObjectA]--E[ObjectB]--E[ObjectC]

我盡力去完成什麼,是做一個NSFetchedResultsController在對象A的屬性組合,並通過ObjectC一個屬性排序。

這種排序應該如何工作: - 在ObjectC中有一個日期屬性;最近更新時間。 ObjectA將連接到幾個ObjectC,並通過幾個lastUpdated。 - 我的NSFetchedResultsController將顯示ObjectA,按這些lastUpdated排序。 - 具有最新更新的ObjectC的ObjectA應首先顯示。 - 我只是感興趣的ObjectA ObjectC與最新lastUpdated值。

這可能與NSFetchedResultsController和CoreData?

我認爲一種替代方法是在ObjectA上創建一個NSFetchedProperty以重新映射到ObjectC,但這可能不是一個更好的解決方案。

回答

0

您將無法使用單個NSFetchRequest來做到這一點。您可以通過使用NSExpression s和setPropertiesToFetch:來關閉,但不完全,因爲您無法在鍵值編碼中嵌套集合運算符。

最好的辦法是在ObjectA上創建一個NSFetchedProperty,該ObjectA通過最近的lastUpdated獲取關聯(通過ObjectB)ObjectC。爲了實現這個目的,你最好的辦法是在ObjectB上創建一個NSFetchedProperty,它獲得關聯的ObjectC和最近的lastUpdated

+0

我現在已經嘗試了'NSFetchedProperty'的方法,但它似乎沒有工作。我不能在'NSFetchedResultsController'中對獲取的屬性進行排序我只是得到一個錯誤'keypath fetchedPropertyName not found in entity ' – Andi 2012-02-14 15:18:55

+0

我想你必須使它成爲一個普通的屬性而不是一個獲取的屬性,並且只要確保在關係改變時更新屬性。或者,您將不得不停止使用'NSFetchedResultsController'並手動進行排序。 – yuji 2012-02-15 23:22:17

相關問題