访问for循环中的核心数据关系是否很慢?

时间:2014-10-27 04:45:34

标签: sql objective-c sorting core-data

我有2个模型,一个叫做Books,另一个叫做Users。作为一种关系,用户可以拥有一本书。我想循环遍历所有“已批准”的用户(User上的属性),并根据存储在Books中的属性对其进行排序。我写这个是为了这样做:

- (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时,都必须从核心数据中获取它。

我想知道是否有这个问题的解决方案,当给定一组被批准属性为真的用户时,我可以返回那些根据他们的书评分排序的用户,我不需要查询用户的每次都预订。

1 个答案:

答案 0 :(得分:1)

您可以使用NSSortDescriptor。因此排序将在SQLite级别进行。 NSSortDescriptor有一个名为sortDescriptorWithKey:ascending:selector:的初始化程序。您可以使用key属性对其进行排序(它是一个字符串)。希望这会有所帮助。

相关问题