2010-03-20 22 views
1

我一直在想出一種方法來解決我的問題,但我能想到的每個解決方案都是凌亂的,讓我想要回去。尋找一個優雅的方式來存儲在訂購很重要的coredata一對多的關係

我有一個一對多的關係,由一個可以有許多成員對象的Team對象組成。當我使用Xcode構建我的數據模型時,我被賦予了用於存儲成員對象的默認NSSet,不幸的是,Sets不是有序的,我需要保留成員對象的順序,我需要知道是否有空的空間成員。

我想過使用NSArray代替NSSet並在我的數據存儲中創建一個虛擬成員對象,我可以用它來標記成員對象之間的空白點,但該解決方案真的感覺像是太多的黑客對我來說。因爲我總是必須從任何查詢中過濾掉這個虛擬成員。

NSDictionary將是完美的,因爲我可以將成員對象引用及其位置存儲爲對象密鑰對(注意順序和空位),但顯然CoreData不支持NSDictionary。

有沒有人有類似的需求,並設計了一個簡單的解決方案?

+0

[核心數據現在支持使用NSOrderedSet的有序對多關係。](http://developer.apple.com/library/mac/releasenotes/DataManagement/RN-CoreData/index.html#//apple_ref/doc/ uid/TP40010637-CH1-DontLinkElementID_3) 可以通過粗略的Google找到更多信息。我希望答案能夠更新,不再誤導(不是故意的)像我這樣的新人。 我只是花了半個小時尋找這個,這要歸功於出色的[Rob Rix](https://twitter.com/rob_rix)來告訴我。 – Swizzlr 2013-01-30 15:19:03

回答

4

有序的關係實現起來微不足道。 Here's the code I did for one of NSManagedObject subclasses.

(出於某種原因,我不能發佈格式代碼今天計算器)

在這種情況下,我已經得到了設置類似於關係:

AlphaEnity<-->>AlphaToBetaEntity<<-->BetaEntity 

的AlphaToBetaEntity有order屬性。我對AlphaToBetaEntity進行排序,然後根據需要返回鏈接的BetaEntity。這就像在老派C中做指針排序一樣。

它具有在非常大的集合上快速起泡的優點,並且您不必在BetaEntity中出錯,直到您需要從中讀取屬性爲止。

+0

只是一個更新:我終於實現瞭解決方案。起初我以爲我會按照上面的建議去做,但是你的解決方案更適合我的人際關係。具有中間排序對象的結果並不像我想的那麼可怕,因爲它適合於我的數據模型的上下文,謝謝!我希望我可以將兩個解決方案標記爲已接受! – 2010-03-29 23:46:35

3

缺乏有序的核心數據對多關係是底層數據庫設計的人爲因素。其原因以及潛在的解決方案在this Cocoa mailing list thread中討論。解決方案包括將索引屬性添加到託管對象或將這些對象保留在鏈接列表中。

如果您不想自己做這件事,Brian Webster已將有序的多核Core Data關係here的實現放在一起。最後,如果你正在尋求轉換核心數據,Aaron Hillegass的新BNRPersistence framework支持有序的關係。

+0

今天我的googlefu顯然很弱。感謝或指引我朝着正確的方向發展。 Brian訂購的許多解決方案看起來正是我所需要的。 – 2010-03-20 21:00:43

相關問題