2010-08-02 40 views
4

當我使用多對多關係重新啓動核心數據應用程序時,我的數據(在NSTableView中呈現)以隨機順序排列。如何在退出應用程序之前按照用戶離開的順序保留它?核心數據:重新啓動時訂購的多對多關係

當然,我可以對awakeFromNib中的數據進行排序,但這並沒有給出用戶排列數據所用的精確順序(例如,他可能會手動重新排列行)。

我的文檔的細節:我有一個實體「關係」與實體「卡」之間的多對多關係,這兩個關係都由NSArrayController管理。 Card有2個屬性,通過Bindings在NSTableView的兩列中顯示「number」(int)和「name」(String)。排序是通過點擊表頭完成的。

如何保存排序順序?

回答

10

核心數據不支持有序集合(如NSArray)。這是爲了支持諸如只取得一小部分信息而不需要拉入整個商店。這就是爲什麼結果總是在NSSet(無序集合)中給出的原因。

保留任何排序順序的唯一方法是添加一個屬性到你的實體,如「sortOrder」,並確保它被設置爲有效的東西。然後,您可以將數組控制器的排序描述符設置爲按sortOrder升序排序。同樣,如果您使用NSFetchRequest手動抓取,也可以設置其排序描述符。

更新獅子(10.7)

如果您的目標是你的應用程序10.7及以上,NSManagedObject now gives you ordered relationships.使用-mutableOrderedSetValueForKey:和-mutableOrderedSetValueForKey:設置和檢索NSOrderedSets。好極了!

+0

有沒有關於如何實際使用NSOrderedSet的例子?在NSTableView或NSOutlineView中說? – Tony 2011-12-20 01:27:07

+1

基於發行說明(http://developer.apple.com/library/mac/#releasenotes/DataManagement/RN-CoreData/_index.html)我認爲基本上所有的綁定排序和拖放更改直接影響使用NSOrderedSet時的順序。這就是它的全部內容:改變集合中對象的順序並保持不變。 – 2011-12-20 02:11:20