使用nil选项解析NSPredicate以查找任何对象

时间:2014-08-18 22:52:35

标签: parse-platform

我试图搜索网络,并没有遇到任何有关NSPredicate驱动查询的默认回退的主题。

例如,我想通过某种类别查询一些笑话。

所以我得到了这个小帮手方法:

- (PFQuery)queryJokesWithCategory:(PFObject *)category language:(NSString *)language {

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"language = %@ AND category = %@", language, category];
    PFQuery *jokes = [PFQuery queryWithClassName:@"Joke" predicate:predicate];
    return jokes;
}

如果我为这个类别传递nil,我会期望得到所有的笑话,但它并没有给我一个。像这样:

PFQuery *jokesQuery = [self queryForJokesWithCategory:nil language:@"EN"];

有没有办法像我的方法那样做?我错过了哪些具体的关键词?

1 个答案:

答案 0 :(得分:0)

在这种情况下你想要做的是检查"类别"密钥存在,在您的情况下,它始终会,所以您可以运行此查询:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"language = %@ AND category IN SELF", language];
PFQuery *jokes = [PFQuery queryWithClassName:@"Joke" predicate:predicate];
return jokes;

此查询将在Joke表中查询具有指定语言的所有笑话,忽略该类别,仅确保定义它。

编辑:

我不知道你的应用是如何工作的,但听起来用户需要输入一个类别和一种语言,然后你想根据他们的条目构建一个查询。您必须检查他们的类别字段是否为空,然后执行上面发布的查询,如果它不是空的,请使用原始查询。我不认为你可以在一个查询中完成这个。

作为另一个建议,可能会使类别字段成为强制性的,或者只是拥有一个"查看全部"按钮以查看所选语言下的所有笑话。