iOS - Parse - PFQuery No funciona
-
02-01-2020 - |
Pregunta
Estoy creando una clase personalizada ChatRequest
, pero cuando trato de consulta, no se devolverá ningún claves personalizadas.
Aquí está mi código:
- (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];
}
}
Alguien puede ayudar?He comprobado que mi clase era la correcta, y las llaves estaban allí, pero todavía no funciona.
Solución
No uso setValue
para agregar una restricción a una consulta.Utiliza whereKey:equalTo:
, por lo que el código debe ser:
- (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];
}
}
Sin embargo, por razones de rendimiento es una mala idea llamar a la búsqueda de objetos de forma sincrónica como este.Usted debe utilizar - (void)findObjectsInBackgroundWithBlock:(PFArrayResultBlock)block
para permitir la consulta completa en el fondo.En la realización de bloque puede actualizar su interfaz de usuario.
También, desde un punto de vista del diseño de su toUser
debe ser un tipo de referencia de la columna, no un tipo de cadena.Usted podría utilizar
[query whereKey:@"toUser" equalTo:[PFUser currentUser]];