Author
具有多個Books
,這兩個都是使用核心數據建模爲一對多關係的NSManagedObjects
。 20%的時間我只需要知道作者寫了多少本書,所以我查了author.books
。相同NSManagedObjects的多個關係
40%的時間我需要按發佈日期排序的這些數據,而40%的時間我需要按標題排序。多個類將希望訪問這些有序列表。
問題1
是否合理兩個額外的方法添加到Author : NSManagedObject
?由於我需要從多個地方請求它們,因此每次在發出請求的課程中對NSSet進行排序似乎都更爲智能。即:
@property NSSet *books; //core data generated - just returns the unordered set
- (NSArray *)booksByDate //applies an NSSortDescriptor to self.books, returns an NSArray
- (NSArray *)booksByTitle //applies an NSSortDescriptor to self.books, returns an NSArray
問題2
使用NSSortDescriptor
已經證明昂貴,對UI性能產生影響。理想情況下,我想嘗試使用新(ish)NSOrderedSet
按照有序對關係進行建模,以查看是否有性能優勢。但我無法真正選擇訂購這種關係的方式,因爲無論我選擇哪種方式(按日期或按標題)都不是最佳時機。更不用說,我可能想稍後添加更多的排序變體。
有沒有什麼辦法可以讓我的兩個世界最好,並將關係存儲在我的核心數據模型中3次?一次爲無序關係(NSSet
),一次爲有序關係(NSOrderedSet
)。我只會考慮如果保持所有三個屬性彼此一致可能是自動的 - 也許通過調整NSManagedObject
如何添加/刪除/更新其書籍。例如,我想以某種方式定製author.addBook
以將同一本書(在正確的位置)插入author.booksByDate
和author.booksByTitle
。並可能隱藏
是這樣的可能嗎?建議?請記住,我的主要目標是加快檢索有序列表 - 我願意犧牲插入/更新/刪除的寫入時間。