如何根据核心数据中的子关系计数进行排序?

时间:2013-06-26 15:01:35

标签: iphone ios core-data

我有一个如下模型:

enter image description here

我正在尝试查询在某个pageId上喜欢帖子的所有用户。我只想在User.liked中返回与给定pageId匹配的帖子。此外,我希望它按User.liked的计数排序。

我可以一次性获取吗?

到目前为止我的代码:

NSFetchRequest* userFetch = [NSFetchRequest fetchRequestWithEntityName:@"User"];

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"(SUBQUERY(liked, $x, $x.page.pageId = %@).@count > 0)", self.pageId];
[userFetch setPredicate:predicate];

NSArray *allUsers = [_document.managedObjectContext executeFetchRequest:userFetch error:nil];

这正确地只给了我在页面上至少有一个类似的用户对象,但可能包含User.liked中其他页面的帖子。此外,它没有排序。

我可以通过这样做来对post-fetch进行排序:

_users = [allUsers mutableCopy];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"liked.@count" ascending:NO];
_users = [[_users sortedArrayUsingDescriptors:@[sortDescriptor]] mutableCopy];

但那SLOOOOOOOWS一切顺着。如果在获取中无法进行排序,我怎样才能加快排序后取?

我是一个CoreData newb,当我像这样陷入困境时,我通常只是完全抛弃CoreData并开始通过将我的NSObject序列化到磁盘来管理数据。在我这样做之前有任何提示吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

据我记忆,在子查询中你应该使用' == '而不是' = '所以你可以尝试使用子查询:

@"(SUBQUERY(liked, $x, $x.page.pageId == %@).@count > 0)"

这可能会解决部分but might include Posts from other Pages in User.liked

<强>被修改