15 Stimmen

NSSortDescriptor und ungültige Werte

Ich verwende einen NSSortDescriptor, um NSDate-Objekte in einer aufsteigenden Reihenfolge zu sortieren. Ich benötige jedoch Daten mit Null am Ende der Liste, während sie im Moment am Anfang stehen.

9voto

Daniel Wood Punkte 4350

Am Ende habe ich beschlossen, dass mit Null-Werte ist keine gute Idee, und wenn ich, was waren Null-Wert am unteren Rand der aufsteigenden Liste erscheinen sollte ich die Daten auf [NSDate distantFuture] und Sie überprüfen, für diese vor der Anzeige von ihnen. Es stellt sich heraus, dass dies auch innerhalb der Anwendungen semantisch mehr Sinn macht.

7voto

Tim Ritchey Punkte 171

Sieht aus wie Sie bereits eine Lösung haben, aber für alle anderen suchen, um noch nil NSDates verwenden, und haben Sie an der Unterseite, ich verwende den folgenden Code, wo ich absteigend sortieren, und dann die Reihenfolge der Objekte an den Vergleich gesendet umkehren.

_sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"dueDate"
                                                ascending:NO
                                               comparator:^NSComparisonResult(id obj1, id obj2)  {
                                                   return [obj2 compare:obj1];
                                               }];

0 Stimmen

Hat der Vergleich nicht undefiniertes Verhalten, wenn obj1 ist nil und obj2 ist ein Datum?

0 Stimmen

Hinweis für alle, die versuchen, dies in Core Data zu verwenden: Vergleicher werden nicht unterstützt und führen zu einer Laufzeitausnahme (vielleicht nur, wenn Ihre Core Data SQLite-gestützt ist)

6voto

Daniel Wood Punkte 4350

Natürlich sollte ich die

initWithKey:ascending:selector:

und schreibe meinen eigenen Vergleichsselektor

0 Stimmen

Ganz genau. Haben Sie benutzerdefinierte Logik, um Null-Werte zu behandeln und rufen Sie dann [myNSDateInstance compare:secondDate]; wenn zweites Datum nicht Null ist.

0 Stimmen

Das wird nicht helfen, denn compare: wird an die NSDate-Instanzen gesendet; wenn nil beim Empfänger ankommt, wird das Ergebnis sein NSOrderedSame und wenn der Empfänger nicht nil aber das Argument ist, dass ich nicht glaube, dass ein bestimmtes Ergebnis garantiert ist.

0 Stimmen

Dies funktioniert leider nicht, wenn die Daten von Core Data abgerufen werden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X