2012-10-23 21 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的类似解决方案。

相关问题