PFQuery 其中 whereKey 是指针

PFQuery in which whereKey is pointer

我有 2 个 classes:帖子 class 和用户 class。我一直在尝试查询 Posts class 以仅显示当前用户关注的帖子。我这样做:

[query whereKey:@"user" containedIn:[PFUser currentUser][@"followings"]];

第"followings"列是包含当前用户关注的objectId的数组。我的问题似乎在于 Posts class 中的键 @"user" 是指向用户 class 的指针并导致此错误:

Error: pointer field user needs a pointer value (Code: 102, Version: 1.2.10)

我该怎么办?提前致谢。

编辑 1: 添加了信息

这里我提供关于上述 2 classes 的详细信息:

objectId(字符串)----文本(字符串)----用户(指针)----...

objectId(string)----username(string)----followings(array of users'objectId)----...

据我所知,在 Parse 的数组中不能有指针,您必须将用户的 objectId 放入数组 "followings",然后在数组中搜索该值。然后你可以像这样搜索 PFUser:

PFQuery *query = [PFUser query];
[query whereKey:@"objectId" equalTo:@"INSERT-OBJECT-ID-IN-ARRAY"];
PFUser *user = (PFUser *)[query getFirstObject];

要仅获取当前用户的 posts,您需要使用 user Where query from parse 您需要在其中传递当前用户

我post在这里提供一个小代码片段,可以让您清楚地了解

 PFQuery *query = [PFQuery queryWithClassName:@"PostTable"];

 [query whereKey:@"user"  equalTo:[PFUser currentUser]]; // "user" must be pointer in the post class (table)
 [query orderByDescending:@"createdAt"];
 [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
          for (PFObject *obj in objects) {

           NSLog(@"object %@",obj);

           }


     }
    if (error) {
          [_delegate gotError:error forTable:TABLE_MEDIA];
     }
}];

在上面的代码片段中,它只会给你属于你当前用户的 post,如果你想要任何其他用户的 post,你应该在 where 查询中传递该用户实例。

因此,要获得关注用户的 post,您必须通过指针解析所有关注用户,并通过上述查询获取他们的 post。

要使指针在数组中的单行中,请参考下面的代码。

 [userClass addObject:userPointer forKey:@"following"];

所以现在当你得到用户时,你将拥有以下所有带指针的用户,你可以通过上面的代码片段

得到它的post

我通过使用 matchesQuery:

实现了只查询当前用户关注的帖子
PFQuery *userQuery = [PFUser query];
[userQuery whereKey:@"objectId" containedIn:[PFUser currentUser][@"followings"]];
[query whereKey:@"user" matchesQuery:userQuery];

已检查的响应swift版本

//Create an user query
let userQuery = PFUser.query()
//get all PFUser contained in string array
userQuery?.whereKey("objectId", containedIn: PFUser.currentUser()!["FollowArray"]as! [String])
//add subquery
query.whereKey("user", matchesQuery: userQuery!)