如何使用Parse查询Ascending

时间:2016-02-12 19:02:44

标签: ios objective-c parse-platform

目前即使我做orderByAscending它也不会通过提升来做到。 我没看到的问题是什么?我正在使用Parse

PFQuery *foodList = [PFQuery queryWithClassName:@"Food"];

[foodList whereKey:@"date" greaterThanOrEqualTo:minimumDate];
[foodList whereKey:@"date" lessThan:maximumDate];
[foodList orderByAscending:@"expiration_date"];


[foodList findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
  if (!error) {

  }];

示例

food_name     expiration_date
Apple           1/2/15
Banana          1/2/15
Pear            1/3/15
Kiwi            1/1/15

输出

输出非常随机。 我假设列表在查询时没有被排序。我不确定如何解决这个问题。

2 个答案:

答案 0 :(得分:3)

我使用NSSortDescriptor变体对Parse SDK进行排序,并且没有遇到任何问题(也可以像过滤那样对多个键进行过滤)。

这是使用描述符而不是键进行排序的方法:

PFQuery *foodList = [PFQuery queryWithClassName:@"Food"];

[foodList whereKey:@"date" greaterThanOrEqualTo:minimumDate];
[foodList whereKey:@"date" lessThan:maximumDate];

NSSortDescriptor *orderBy = [NSSortDescriptor sortDescriptorWithKey:@"expiration_date" ascending:YES];
[foodList orderBySortDescriptor:orderBy];

答案 1 :(得分:1)

我发现,一旦你开始添加多个过滤器,Parse Query就相当不可靠,而且它可能是一个bug,但似乎没有太多理由。当我有多个过滤器时,我所做的就是NSPredicate。

NSPredicate *minPredicate = [NSPredicate predicateWithFormat:@"date >= %@", minimumDate];
NSPredicate *maxPredicate = [NSPredicate predicateWithFormat:@"date < %@", maximumDate];
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[minPredicate,maxPredicate]];
PFQuery *foodList = [PFQuery queryWithClassName:@"Food" predicate:predicate];
[foodList orderByAscending:@"expiration_date"];

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

}];

另一种可能性是您的查询过滤了日期,然后您通过&#34; expiration_date&#34;而且我不确定两者之间是否存在脱节。确保您的对象术语符合您的要求。