iOS – анализ – PFQuery не работает
-
02-01-2020 - |
Вопрос
Я создаю собственный класс ChatRequest
, но когда я пытаюсь запросить его, он не возвращает никаких пользовательских ключей.
Вот мой код:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
PFQuery *query = [PFQuery queryWithClassName:@"ChatRequest"];
[query setValue:[PFUser currentUser].username forKey:@"toUser"];
NSArray *objects = [query findObjects];
for (NSUInteger i = 0; i < objects.count; i++) {
PFObject *object = [objects objectAtIndex:i];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Chat Request!" message:object.sendingUser + @"wants to chat with you!" delegate:self cancelButtonTitle:@"Decline" otherButtonTitles:@"Accept", nil];
[alertView show];
}
}
Кто-нибудь может помочь?Я проверил, что мой класс правильный и ключи на месте, но все равно не работает.
Решение
Вы не используете setValue
чтобы добавить ограничение в запрос.Ты используешь whereKey:equalTo:
, поэтому ваш код должен быть:
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
PFQuery *query = [PFQuery queryWithClassName:@"ChatRequest"];
[query whereKey:@"toUser" equalTo:[PFUser currentUser].username ];
NSArray *objects = [query findObjects];
for (NSUInteger i = 0; i < objects.count; i++) {
PFObject *object = [objects objectAtIndex:i];
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Chat Request!" message:object.sendingUser + @"wants to chat with you!" delegate:self cancelButtonTitle:@"Decline" otherButtonTitles:@"Accept", nil];
[alertView show];
}
}
Однако из соображений производительности синхронно вызывать объекты поиска таким образом — плохая идея.Вы должны использовать - (void)findObjectsInBackgroundWithBlock:(PFArrayResultBlock)block
чтобы разрешить выполнение запроса в фоновом режиме.В блоке завершения вы можете обновить свой пользовательский интерфейс.
Кроме того, с точки зрения дизайна ваш toUser
должен быть столбцом ссылочного типа, а не строкового типа.Затем вы можете использовать
[query whereKey:@"toUser" equalTo:[PFUser currentUser]];