0

誰もがこれを縮小する方法を知っているので、QueryForTableメソッドのメインスレッドでクエリを実行する必要はありませんか?私はParse.comを使用しています

//Find who are the users following (RELATIONSHIP OBJECT)
PFQuery *followeesQuery = [PFQuery queryWithClassName:@"Relationship"];
[followeesQuery whereKey:@"Follower" equalTo:[PFUser currentUser]];
NSArray *followees = [followeesQuery findObjects];
//Filter followees
self.followees = [[NSMutableArray alloc] initWithCapacity:[followees count]];
for (int i = 0; i < [followees count]; i++) {
    PFObject *followee = followees[i];
    PFUser *user = (PFUser *)[followee objectForKey:@"User"]; //USER OBJECT
    [self.followees addObject:user];
}


PFQuery *nearbyPhotosQuery = [PFQuery queryWithClassName:@"Photo"]; //PHOTO OBJECT
[nearbyPhotosQuery whereKey:@"User" notContainedIn:self.followees];
[nearbyPhotosQuery whereKey:@"Location" nearGeoPoint:self.userCurrentLocation withinKilometers:10];

PFQuery *followersPhotoQuery = [PFQuery queryWithClassName:@"Photo"]; //PHOTO OBJECT
[followersPhotoQuery whereKey:@"User" containedIn:self.followees];

NSMutableSet *set = [NSMutableSet setWithArray:[nearbyPhotosQuery findObjects]];
[set addObjectsFromArray:[followersPhotoQuery findObjects]];

NSArray *targetPhotoObjects = [set allObjects];

NSMutableArray *targetIDs = [[NSMutableArray alloc] initWithCapacity:[targetPhotoObjects count]];
for (int i = 0; i < [targetPhotoObjects count] ; i++) {
    PFObject *photoObject = targetPhotoObjects[i];
    [targetIDs addObject:photoObject.objectId];
}


PFQuery *targetPhotoQuery = [PFQuery queryWithClassName:@"Photo"];
[targetPhotoQuery whereKey:@"objectId" containedIn:targetIDs];


return targetPhotoQuery;
4

1 に答える 1

1

私がこれを正しく読んだら、あなたはフォロワーまたはあなたの近くのすべての写真のクエリが必要です。使用しない理由:

PFQuery *followeesQuery = [PFQuery queryWithClassName:@"Relationship"];
[followeesQuery whereKey:@"Follower" equalTo:PFUser.currentUser];

PFQuery *followeesPhotosQuery = [PFQuery queryWithClassName:@"Photo"];
[followeesPhotosQuery whereKey:@"User" matchesKey:@"User" inQuery:followeesQuery];

PFQuery *nearbyPhotosQuery = [PFQuery queryWithClassName:@"Photo"];
[nearbyPhotosQuery whereKey:@"Location"
               nearGeoPoint:self.userCurrentLocation
            withinKilometers:10];

return [PFQuery orQueryWithSubqueries:@[followeesPhotosQuery, nearbyPhotosQuery]];

これは、サーバー側のトリップを作成する必要のない、探しているものに一致するクエリです。プロセスのいずれかのステップで100を超える要素が返されると予想される場合は、内部クエリによって返される要素の最大数を試す必要がある場合があります。途中の各クエリには、独自のクエリ制限が適用されます。

于 2012-12-22T21:37:47.823 に答える