- (NSArray *)sortedApprovedUsersByBookRating
{
NSArray *allUsersWithBooks = [User fetchFromDatabaseWithPredicate:[NSPredicate predicateWithFormat:@"approved == 1"] error:nil];
NSArray *sortedUsers = [allUsersWithBooks sortedArrayUsingComparator:^NSComparisonResult(User a, User b) {
return [a.book.rating compare:b.book.rating];
}];
return sortedUsers;
}
这是有效的,因为我在用户名为book的核心数据中有一个关系,它抓住了正确的书,对它进行了整理并返回。但是,我注意到当我有很多用户时,这是一个非常慢的过程。我的理论是,因为每次我访问a.book或b.book时,都必须从核心数据中获取它。
我想知道是否有这个问题的解决方案,当给定一组被批准属性为真的用户时,我可以返回那些根据他们的书评分排序的用户,我不需要查询用户的每次都预订。
答案 0 :(得分:1)
您可以使用NSSortDescriptor
。因此排序将在SQLite级别进行。 NSSortDescriptor
有一个名为sortDescriptorWithKey:ascending:selector:
的初始化程序。您可以使用key
属性对其进行排序(它是一个字符串)。希望这会有所帮助。