1

我有一个如下模型:

在此处输入图像描述

我正在尝试查询所有喜欢某个 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 中其他页面的帖子。此外,它没有排序。

我可以通过这样做对获取后进行排序:

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

但是,这一切都慢了下来。如果无法在 fetch 中进行排序,如何加快排序后获取?

我是 CoreData 新手,当我遇到这样的问题时,我通常只是完全扔掉 CoreData 并通过将我的 NSObjects 序列化到磁盘来开始管理数据。在我在这里做之前有什么提示吗?

谢谢!

4

1 回答 1

0

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

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

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

已编辑

于 2013-06-26T18:46:14.167 回答