2010-01-07 21 views
9

Estoy usando un NSSortDescriptor para clasificar objetos NSDate en orden ascendente. Sin embargo, necesito fechas nulas para estar en la parte inferior de la lista, mientras que en este momento están en la parte superior.NSSortDescriptor y valores nulos

Respuesta

9

Al final he decidido que tienen valores nulos no es una buena idea y si yo quiero lo que eran un valor nulo para que aparezca en la parte inferior de la lista ascendente, debo establecer las fechas en [NSDate distantFuture] y verificarlas antes de mostrarlas. Resulta que esto tiene más sentido semántico dentro de las aplicaciones también.

6

Por supuesto, debería utilizar

initWithKey:ascending:selector: 

y escribir mi propio selector de comparación

+0

Exactamente. ¿Tiene una lógica personalizada para manejar valores nulos y luego llama a [myNSDateInstance compare: secondDate]; si la segunda fecha no es nula. –

+0

Eso no ayudará, ya que 'compare:' se enviará a las instancias de NSDate; si 'nil' termina en el receptor, el resultado será' NSOrderedSame', y si el receptor no es 'nil' pero el argumento es, no creo que se garantice ningún resultado específico. –

+0

Desafortunadamente, esto no funciona cuando se obtiene de Datos centrales. – pkamb

7

Parece que ya tiene una solución, pero para cualquier otra persona que desee seguir usando NSDates nil y tenerlos en la parte inferior, uso el siguiente código donde ordeno descendente, y luego invierta el orden de los objetos enviados a la comparación.

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

¿La comparación no tiene un comportamiento indefinido si obj1 es nulo y obj2 es una fecha? –