IOS解析查询

时间:2014-07-29 11:34:21

标签: ios objective-c parse-platform

我正在尝试从我的数据库中解析一些对象。我使用parse.com作为网络服务。 下面的代码根据4个查询返回了一些对象,其中2个是复合的。

变量" meetingAge"必须等于indexAge OR" 6" 变量" meetingSex"必须等于"性别"或" 2" 变量" isAvaiable"必须等于YES 变量" author"必须与user.username

不同

基本上我正在尝试使用2 OR条件和2 AND条件实现查询。

以下代码给出了错误的结果,没有异常或类似的东西,只是一种错误的对象。我确定它是一个语法问题,但我无法弄清楚如何正确编写这个..如果我只使用1个复合查询然后添加2个AND查询,我得到了正确的结果,但后来我想念1过滤器..

PFQuery *queryAge1 = [PFQuery queryWithClassName:@"MeetingObject"];
[queryAge1 whereKey:@"meetingAge" equalTo:indexAge ];
PFQuery *queryAge2 = [PFQuery queryWithClassName:@"MeetingObject"];
[queryAge2 whereKey:@"meetingAge" equalTo:@"6"];
PFQuery *queryCompound = [PFQuery orQueryWithSubqueries:@[queryAge1,queryAge2]];

PFQuery *querySex1 = [PFQuery queryWithClassName:@"MeetingObject"];
[querySex1 whereKey:@"meetingSex" equalTo:user[@"sex"]];
PFQuery *querySex2 = [PFQuery queryWithClassName:@"MeetingObject"];
[querySex2 whereKey:@"meetingSex" equalTo:@"2"];
queryCompound = [PFQuery orQueryWithSubqueries:@[querySex1,querySex2]];

[queryCompound whereKey:@"isAvaiable" equalTo:[NSNumber numberWithBool:YES]];
[queryCompound whereKey:@"author" notEqualTo:user.username];


[queryCompound findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
}

1 个答案:

答案 0 :(得分:0)

在您的行中queryCompound = [PFQuery orQueryWithSubqueries:@[querySex1,querySex2]];,您正在创建一个全新的查询,忽略所有年龄段的内容。

修改

你这太复杂了。

你可以这样做......

PFQuery *query = [PFQuery queryWithClassName:@"MeetingObject"];
[query whereKey:@"meetingAge" containedIn:@[@"6", indexAge]];
[query whereKey:@"meetingSex" containedIn:@[@"2", user[@"sex"]]];
[query whereKey:@"isAvaiable" equalTo:[NSNumber numberWithBool:YES]];
[query whereKey:@"author" notEqualTo:user.username];

[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
}

这将捕获您正在寻找的所有选项。

另外,就像快速说明一样。选择变量名称以使其更具可读性。如果它们都以单词query开头,则很难区分它们。还要使它们具有描述性。 queryAge1queryAge2会让他们更难理解他们在做什么。