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
。并可能隐藏
是这样的可能吗?建议?请记住,我的主要目标是加快检索有序列表 - 我愿意牺牲插入/更新/删除的写入时间。