2013-03-12 69 views
0

這似乎非常微不足道,我不應該問,但我沒有看到它有任何東西。如果我將一組對象(或「set」)保存到CoreData中,爲什麼它總是將其按順序返回?沒有特定的順序給每個數組(用戶列表),所以我不相信會有任何正則表達式或排序描述符。CoreData抓取錯誤

回答

2

爲了讓用戶定義的排序,你可以在你的數據模型添加一個整數屬性(例如「中將sortOrder」)到相應的實體。您可以使用此屬性通過在用戶更改列表中的順序時更新管理對象中的屬性來手動跟蹤排序順序。然後,您將能夠執行提取請求,並根據「sortOrder」屬性指定排序描述符,以按原始用戶定義順序獲取從提取中返回的結果。

如果您使用的是iOS 5或10.7以上版本,則可以創建您的模型,使其具有有序的多對多關係。請參閱iOS 5.0/OS X 10.7 release notes。在界面生成器中,選擇相關關係並檢查「已排序」複選框。

+0

爲什麼要使用'sortOrder'屬性,並且只是在執行提取請求時需要排序? – 2013-03-12 04:03:47

+0

原始海報表示數據沒有順序(例如,它不按時間順序排列,不按字母順序等),因爲用戶在添加和重新排列項目時定義了列表的順序。添加sortOrder屬性允許將訂單保存在模型中,然後在用戶通過表視圖或其他方式操縱訂單時保持最新狀態。然後可以在NSSortDescriptor中使用sortOrder屬性來按照用戶先前設置的相同順序對項目進行排序。 – Andrew 2013-03-12 06:15:22

+0

@安德魯感謝您的幫助。我希望我不會訴諸添加排序屬性到所有我的數據庫實體,但我想這是唯一的方法:( – random 2013-03-12 17:45:03

2

NSSet沒有保證的順序。您需要NSArray才能找到特定元素或控制返回集的順序。

+0

它在[docs](https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSSet_Class/Reference/Reference.html)中非常清楚。排序描述符在這種情況下非常常見。 – 2013-03-12 02:25:32

+0

這是在文檔中指出,但沒有描述符來排序是問題。安德魯的答案就是我要做的。 – random 2013-03-12 17:44:20