2012-08-22 71 views
0

這裏的問題是,在使用coredata時,使鏈表保持順序/優先級是否是一個很好的選擇,或者應該使用簡單的var來將優先級保持爲數字。CoreData LinkedList?

如果在N/2位置的N個對象的數組中插入一個新對象,則保留一個數字,那麼必須修改N/2 + 1 - > N/2中對象的所有優先級值,如果我沒有弄錯,會導致很多sql查詢。

如果存在鏈接列表,那麼可以維護該實體的自我關係,稱爲「下一個」。如果在N/2位置插入對象,則只有兩個查詢: 1. N/2-1 - > next - > newObj 2. newObj - > next - > N/2 + 1 但是,問題在於使用NSFetchedResultsController不能使用這種關係對提取的結果進行排序,或者可以在某種程度上進行排序嗎?

請回答這兩種技術中的哪一種與上述情況相關較好。

+0

你能詳細說明一下嗎? – manishnath

+0

雅,但你將如何保持NSArray的優先級沒有索引,或者即使你有一個索引,它會觸發多少個查詢將優先級更新? – manishnath

回答

2

最好的解決方案是使用有序對多關係。這使用一個NSOrderedSet,它像數組一樣保持排序,但也支持像集合一樣的快速成員測試。但是,這僅適用於iOS 5.0或Mac OS X 10.7或更高版本。

如果我需要支持iOS的早期版本,我會選擇具有額外屬性的方法進行排序。這使取得更容易。鏈接列表結構可能更容易更新,但通常取得(用於顯示數據)更經常進行,所以這應該更容易。

如果您需要經常更新您的訂購,您可以在訂購號碼之間留下很大差距。

+0

謝謝斯文..離開間隙聽起來不錯。我想這種方式我不需要更新所有其餘的索引,直到我發現兩個對象爭奪同一地點之間的衝突:) – manishnath