我有一个如下模型:
我正在尝试查询所有喜欢某个 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 序列化到磁盘来开始管理数据。在我在这里做之前有什么提示吗?
谢谢!