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