我有一个如下模型:
我正在尝试查询在某个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序列化到磁盘来管理数据。在我这样做之前有任何提示吗?
谢谢!
答案 0 :(得分:0)
据我记忆,在子查询中你应该使用' == '而不是' = '所以你可以尝试使用子查询:
@"(SUBQUERY(liked, $x, $x.page.pageId == %@).@count > 0)"
这可能会解决部分but might include Posts from other Pages in User.liked
<强>被修改强>