2010-01-07 8 views
9

Ich verwende einen NSSortDescriptor, um NSDate-Objekte in aufsteigender Reihenfolge zu sortieren. Allerdings brauche ich keine Null-Termine, die am Ende der Liste stehen, während sie im Moment ganz oben stehen.NSSortDescriptor und keine Werte

Antwort

9

Am Ende habe ich entschieden, dass Null-Werten ist keine gute Idee, und wenn ich will, was Nullwert waren Um am Ende der aufsteigenden Liste zu erscheinen, sollte ich die Daten auf [NSDate distantFuture] setzen und sie prüfen, bevor sie angezeigt werden. Es stellt sich heraus, dass dies auch innerhalb der Anwendungen mehr semantischen Sinn macht.

6

Natürlich sollte ich

initWithKey:ascending:selector: 

verwenden und meine eigenen Vergleichswähler schreiben

+0

Genau. Verwenden Sie benutzerdefinierte Logik, um keine Werte zu verarbeiten, und rufen Sie dann [myNSDateInstance compare: secondDate]; wenn das zweite Datum nicht null ist. –

+0

Das wird nicht helfen, da 'compare:' an die NSDate-Instanzen gesendet wird; Wenn "nil" den Empfänger beendet, wird das Ergebnis "NSOrderedSame" sein, und wenn der Empfänger nicht "nil" ist, aber das Argument ist, glaube ich nicht, dass ein bestimmtes Ergebnis garantiert ist. –

+0

Dies funktioniert leider nicht beim Abrufen von Core Data. – pkamb

7

Sieht so aus, als ob Sie bereits eine Lösung haben, aber für alle anderen, die weiterhin nil NSDates verwenden möchten, und unten haben, verwende ich den folgenden Code, wo ich absteigend sortiere, und dann die Reihenfolge der gesendeten Objekte umkehren der Vergleich.

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

hat der Vergleich kein undefiniertes Verhalten, wenn obj1 null ist und obj2 ein Datum ist? –

Verwandte Themen