PFQuery, основанный на том, находится ли указатель PFObject в текущем пользовательском режиме "дружба". PFRelation

Я пытаюсь запросить объекты на основе пользователя, который разместил объект PFObject, находящийся в текущем пользовательском PFRelation "дружба". Мне было интересно, если вы можете использовать PFRelation, как NSArray и сделать что-то похожее на это...

@ "пользователь" - это указатель на пользователя PFUser, который разместил объект PFObject.

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 PFUsers из PFRelation, а затем запросить результаты

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

Заранее спасибо, Эван

1 ответ

Решение

Я думаю, что первое должно работать. Но если нет, вы можете объединить два запроса в вашем последнем предложении в один запрос. Таким образом, вместо того, чтобы сначала получить объекты дружбы, а затем запустить новый запрос, вы используете 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;
}];

Отказ от ответственности Я не смог протестировать этот код там, где я сейчас, но он должен дать вам общую концепцию для работы.

Другие вопросы по тегам