2012-10-23 54 views
1

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.booksByDateauthor.booksByTitle。並可能隱藏

是這樣的可能嗎?建議?請記住,我的主要目標是加快檢索有序列表 - 我願意犧牲插入/更新/刪除的寫入時間。

回答

0

我會建議嘗試排序書籍的請求時進行排序。如果您要在UITableView或類似的界面元素上顯示此列表,則可以使用NSFetchedResultsController及其緩存系統讓您的已排序書籍列表緩存。這意味着,當您嘗試訪問按日期/標題排序的書籍時,確定書籍順序的計算已被緩存,並且您的列表將以更快的速度生成。我提供了類似的問題here的類似解決方案。

相關問題