我正在尝试根据发布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
答案 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;
}];
<强>声明强> 我现在还没有能够测试这个代码,但它应该为你提供一般概念。