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];
}];

または、これを達成する唯一の方法が NSArray に PFRelation からの PFUsers を入力し、その結果を照会することである場合

 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

最初はうまくいくはずだと思います。そうでない場合は、最後の提案の 2 つのクエリを 1 つのクエリに組み合わせることができます。したがって、最初にフレンドシップ オブジェクトを取得してから新しいクエリを開始する代わりにmatchesQuery、2 番目のクエリで を使用し、最初のクエリに入れます。

findObjectsInBackgroundWithBlockバックグラウンドで実行されself.followingArray、2 番目のクエリがトリガーされたときに入力されないため、2 番目の提案だけでは機能しません。

matchesQuery が のように機能するかどうかはわかりませんcontainedIn。やってみて。2 番目の提案に進みたい場合は、2 番目のクエリを最初のクエリのブロックの内側に配置する必要があります。

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 に答える