AnAuthor
有多个Books
,两者都NSManagedObjects
使用 Core Data 建模为一对多关系。20% 的时间我只需要知道作者写了多少本书,所以我检查了author.books
.
40% 的时间我需要这些数据按发布日期的顺序排列,40% 的时间我需要它按标题排序。多个类将要访问这些有序列表。
问题 1
添加两个额外的方法是否合理Author : NSManagedObject
?由于我需要从多个地方请求它们,因此它似乎比每次在发出请求的类中对 NSSet 进行排序更聪明。IE:
@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 性能。理想情况下,我想尝试使用 new(ish)NSOrderedSet
按顺序对关系建模,看看是否有性能优势。但我真的不能选择哪种方式来安排关系,因为无论我选择哪种方式(按日期或按标题),40 多岁的时间都是非最佳的。更不用说我以后可能想添加更多排序的变体。
有什么方法可以两全其美,并在我的核心数据模型中存储 3 次关系?一次用于无序关系 ( NSSet
),一次用于有序关系 ( NSOrderedSet
)。如果保持所有三个属性彼此一致可以是自动的,我只会考虑这一点 - 也许通过调整NSManagedObject
添加/删除/更新其书籍的方式。例如,我想以某种方式自定义author.addBook
也将同一本书(在正确的位置)插入到author.booksByDate
andauthor.booksByTitle
中。并且可能隐藏
这样的事情可能吗?建议?请记住,我的主要目标是加快有序列表的检索速度——我愿意为插入/更新/删除牺牲写入时间。