我试图搜索网络,并没有遇到任何有关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"];
有没有办法像我的方法那样做?我错过了哪些具体的关键词?
答案 0 :(得分:0)
在这种情况下你想要做的是检查"类别"密钥存在,在您的情况下,它始终会,所以您可以运行此查询:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"language = %@ AND category IN SELF", language];
PFQuery *jokes = [PFQuery queryWithClassName:@"Joke" predicate:predicate];
return jokes;
此查询将在Joke表中查询具有指定语言的所有笑话,忽略该类别,仅确保定义它。
编辑:
我不知道你的应用是如何工作的,但听起来用户需要输入一个类别和一种语言,然后你想根据他们的条目构建一个查询。您必须检查他们的类别字段是否为空,然后执行上面发布的查询,如果它不是空的,请使用原始查询。我不认为你可以在一个查询中完成这个。
作为另一个建议,可能会使类别字段成为强制性的,或者只是拥有一个"查看全部"按钮以查看所选语言下的所有笑话。