0

我正在尝试根据在当前用户 PFRelation“友谊”中发布 PFObject 的用户来查询对象。我想知道您是否可以像使用 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 中的 PFUsers 填充 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;
}];

在此先感谢,埃文

4

1 回答 1

0

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

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

我不确定 matchQuery 是否会像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;
}];

免责声明 我无法在我现在所在的位置测试此代码,但它应该为您提供工作的一般概念。

于 2014-04-10T04:42:21.600 回答