iOS - Analyser - PFQuery ne fonctionne Pas
-
02-01-2020 - |
Question
Je suis entrain de créer une classe personnalisée ChatRequest
, mais lorsque j'essaie de l'interroger, il ne sera pas de retour personnalisé touches.
Voici mon code:
- (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];
}
}
Quelqu'un peut-il aider?J'ai vérifié que ma classe était correcte et les touches étaient là, mais cela ne fonctionne toujours pas.
La solution
Vous n'utilisez pas setValue
pour ajouter une contrainte à une requête.Vous utilisez whereKey:equalTo:
, de sorte que votre code devrait être:
- (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];
}
}
Cependant, pour des raisons de performance, il est une mauvaise idée d'appeler le trouver des objets de manière synchrone comme ça.Vous devez utiliser - (void)findObjectsInBackgroundWithBlock:(PFArrayResultBlock)block
pour permettre à la requête de terminer dans l'arrière-plan.À la fin du bloc, vous pouvez actualiser votre INTERFACE utilisateur.
Aussi, à partir d'une conception de point de vue de votre toUser
devrait être une référence de type colonne, pas un type de chaîne.Vous pouvez ensuite utiliser
[query whereKey:@"toUser" equalTo:[PFUser currentUser]];