Objective c 如何使用Parse中的查询检查两个不同字段中是否存在值?

Objective c 如何使用Parse中的查询检查两个不同字段中是否存在值?,objective-c,parse-platform,Objective C,Parse Platform,我需要在parse中对一个对象进行查询,以查看两个字段中是否有一个包含值。该值是PFUser对象。我想我需要某种形式的或声明,但我不知道怎么做 这是我到目前为止掌握的代码 PFQuery *query = [PFQuery queryWithClassName:@"GameTradeObject"]; [query whereKey:@"region" equalTo:[NSNumber numberWithInt:region]]; [query whereKey:@"

我需要在parse中对一个对象进行查询,以查看两个字段中是否有一个包含值。该值是PFUser对象。我想我需要某种形式的或声明,但我不知道怎么做

这是我到目前为止掌握的代码

  PFQuery *query = [PFQuery queryWithClassName:@"GameTradeObject"];

    [query whereKey:@"region" equalTo:[NSNumber numberWithInt:region]];

    [query whereKey:@"fromUser" equalTo:[PFUser currentUser]];
    [query whereKey:@"toUser" equalTo:[PFUser currentUser]];

    [query includeKey:@"fromUser"];
    [query includeKey:@"fromVillage"];

    [query includeKey:@"toUser"];
    [query includeKey:@"toVillage"];

    [query findObjectsInBackgroundWithBlock:^(NSArray *PUObjects, NSError *error) {
        if (!error) {

我需要知道当前用户对象是否存在于fromUser或toUser字段中。我认为这可能必须使用NSPredicate来完成,但我不知道如何构建语句。

您可以使用
[PFQuery或querywithsubquerys:@[query1,query2]]
组合两个查询

  PFQuery *query1 = [PFQuery queryWithClassName:@"GameTradeObject"];
  [query1 whereKey:@"region" equalTo:[NSNumber numberWithInt:region]];
  [query1 whereKey:@"fromUser" equalTo:[PFUser currentUser]];

  PFQuery *query2 = [PFQuery queryWithClassName:@"GameTradeObject"];
  [query2 whereKey:@"region" equalTo:[NSNumber numberWithInt:region]];
  [query2 whereKey:@"toUser" equalTo:[PFUser currentUser]];

  PFQuery *query = [PFQuery orQueryWithSubqueries:@[query1, query2]];
  [query includeKey:@"fromUser"];
  [query includeKey:@"fromVillage"];
  [query includeKey:@"toUser"];
  [query includeKey:@"toVillage"];
  [query findObjectsInBackgroundWithBlock:...

另一个通常执行速度更快的选项是将两个用户存储在一个数组中。你可以考虑:

PFQuery *query = [PFQuery queryWithClassname:@"GameTradeObject"];
// array equalTo string returns all objects where the array contains the string
[query whereKey:@"users" equalTo:PFUser.currentUser];
[query includeKey:@"users"];
[query includeKey:@"villages"];
[query findObjectsInBackgroundWithBlock:...];

您可以简单地按照下面的方式实现

  PFQuery *query1 = [PFQuery queryWithClassName:@"GameTradeObject"];
  [query1 whereKey:@"fromUser" equalTo:[PFUser currentUser]];
  [query1 whereKey:@"region" equalTo:[NSNumber numberWithInt:region]];
  PFQuery *query2 = [PFQuery queryWithClassName:@"GameTradeObject"];
  [query2 whereKey:@"toUser" equalTo:[PFUser currentUser]];
  [query2 whereKey:@"region" equalTo:[NSNumber numberWithInt:region]];
  PFQuery *query = [PFQuery orQueryWithSubqueries:@[query1, query2]];
而且您不需要使用第二次includeKey,因为您在query1和query2上筛选了fromUser和toUser列