2016-02-12 7 views
6

Derzeit auch wenn ich OrderByAscending es durch aufsteigend nie tun. Was ist das Problem, das ich nicht sehe? Ich verwende ParseSo fragen Sie bei Ascending mit 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) { 

    }]; 

Beispiel

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

Ausgabe

Die Ausgaben würden sehr zufällig. Ich gehe davon aus, dass die Liste während der Abfrage nicht sortiert wird. Ich bin mir jedoch nicht sicher, wie ich dieses Problem lösen kann.

+2

Können Sie das Ergebnis ausgegeben, die Sie sehen? –

+0

@AndriyGordiychuk Die Ausgabe erfolgt in zufälliger Reihenfolge. – user3281743

+0

Funktioniert der Code, den Sie hier eingeben? Ich denke, Ihre OrderByAscending-Syntax fehlt das @ vor der Zeichenfolge. Es sollte [foodList orderByAscending: @ "expiration_date"] sein; – Rufus

Antwort

1

Ich habe festgestellt, dass die Parse-Abfrage ist ziemlich unzuverlässig, wenn Sie beginnen, mehrere Filter hinzufügen, und es kann ein Fehler sein, aber es scheint nicht viel Grund dafür zu sein. Was ich getan habe, wenn ich mehrere Filter habe, ist ein NSPredikat.

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) { 

}]; 

Eine andere Möglichkeit ist, dass Ihre Abfrage für Datum filtert und dann bestellen Sie mit „expiration_date“ und ich bin nicht sicher, ob es eine Trennung zwischen den beiden. Stellen Sie sicher, dass Ihre Objektnomenklatur genau das ist, was Sie wollen.

3

Ich verwende die NSSortDescriptor Variante, um mit dem Parse SDK zu sortieren und hatte keine Probleme damit (auch die Filterung auf mehrere Schlüssel wie Sie haben, ist in Ordnung).

Dies ist, wie man einen Descriptor unter Verwendung würde sortieren, wie ein Schlüssel gegen:

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]; 
Verwandte Themen