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

变量"meetingAge"必须等于indexAge或"6" 变量"meetingSex"必须等于"sex"或"2" 变量"isAvaiable"必须等于YES 变量"author"必须与user不同。用户名称

基本上我正在尝试实现具有2或条件和2和条件的查询。

下面的代码给了我一个错误的结果,没有异常或类似的东西,只是一个错误的对象。我确定这是一个语法问题,但我无法弄清楚如何正确地写这个。.如果我只是使用1个复合查询,然后将2和查询添加到其中,我会得到一个正确的结果,但后来我错过了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) {
}
有帮助吗?

解决方案

在你的队伍里。.. 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 让人更难理解他们在做什么。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top