PFQuery基于PFObject的指针是否在当前用户“友谊”PFRelation中

时间:2014-04-09 22:19:14

标签: ios objective-c parse-platform pfquery pfrelation

我正在尝试根据发布PFObject的用户在当前用户PFRelation“友谊”中查询对象。我想知道你是否可以像使用NSArray那样使用PFRelation并做类似的事情。

@“user”是指向发布PFObject的PFUser的指针。

PFQuery *query = [PFQuery queryWithClassName:TV_TIMELINE_POSTS];
[query includeKey:@"user"];
[query whereKey:@"user" containedIn:[PFUser currentUser][@"friendship"]];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    [self.objectArray addObjectsFromArray:objects];
}];

或者,如果实现这一目标的唯一方法是使用PFRelation中的PFUser填充NSArray,然后查询结果

 PFRelation *relation = [[PFUser currentUser] relationForKey:@"friendship"];
 PFQuery *relationQuery = [relation query];
 [relationQuery findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
     self.followingArray = [[NSMutableArray alloc] initWithArray:objects];
 }];

PFQuery *query = [PFQuery queryWithClassName:TV_TIMELINE_POSTS];
[query includeKey:@"user"];
[query whereKey:@"user" containedIn:self.followingArray];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    [self.objectArray addObjectsFromArray:objects];
    [self.collectionView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
    [self.refreshControl performSelectorOnMainThread:@selector(endRefreshing) withObject:nil waitUntilDone:NO];
     _isLoading = NO;
}];

提前致谢,Evan

1 个答案:

答案 0 :(得分:0)

我认为第一个应该工作。但如果没有,您可以在一个查询中将上一个建议中的两个查询组合在一起。因此,不是首先获取友谊对象然后触发新查询,而是在第二个查询中使用matchesQuery并放入第一个查询。

单独的第二个建议不起作用,因为findObjectsInBackgroundWithBlock将在后台执行,并且在第二个查询触发时不会填充self.followingArray

我不确定matchesQuery是否会像containedIn那样工作。试试看。如果你想要第二个建议,你需要将第二个查询放在第一个查询的块中。

PFRelation *relation = [[PFUser currentUser] relationForKey:@"friendship"];
PFQuery *relationQuery = [relation query];

PFQuery *query = [PFQuery queryWithClassName:TV_TIMELINE_POSTS];
[query includeKey:@"user"];
[query whereKey:@"user" matchesQuery:relationQuery];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    [self.objectArray addObjectsFromArray:objects];
    [self.collectionView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
    [self.refreshControl performSelectorOnMainThread:@selector(endRefreshing) withObject:nil waitUntilDone:NO];
     _isLoading = NO;
}];

<强>声明 我现在还没有能够测试这个代码,但它应该为你提供一般概念。