2012-02-07 26 views
12

Quiero pedir primero un NSFetchRequest por fecha y luego, si coincide con el mismo día, ordenar por nombre. utilizo un UIDatePicker para obtener la fecha y la salvo a ella usando la base de datosOrdenar NSFetchRequest por fecha y luego por orden alfabético

[self.managedObject setValue:self.datePicker.date forKey:self.keypath]; 

y ordenar los NSFetchRequest así:

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"day" ascending:NO]; 
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, sortDescriptor2, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 

Ahora mi problema es que sólo ser ordenada por fecha y no por nombre porque el UIDatePicker almacenó en Core Data la fecha pero también la hora. Entonces, incluso si el mismo día, no ordena por "nombre" en ese mismo día porque la hora es diferente. Entonces, ¿cómo guardo en los datos básicos solo la fecha mm/dd/aaaa y no de hora desde un UIDatePicker?

¿O piensa en otra solución?

+3

Debe eliminar el tiempo de la fecha. http://stackoverflow.com/questions/4187478/truncate-nsdate-objective-c –

+0

¿necesita la información de tiempo para cualquier otra cosa? De lo contrario, podría establecer los componentes de tiempo en 0 cuando configure la hora del objeto de datos del núcleo. Si lo necesita, debe agregar otro atributo que use NSDate sin componentes de tiempo o una cadena aaaammdd. –

Respuesta

0

CoreData admite NSDate, pero siempre incluirá la hora. Lo único que se me ocurre es tener una propiedad personalizada de solo lectura que tenga una marca de tiempo sin horas incluidas y luego crear un descriptor de clasificación para esa propiedad.

5

Utilice un bloque de comparación para su clasificación de fecha para convertir la fecha en una cadena con formato aaaaMMdd.

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"yyyyMMdd"]; 
NSSortDescriptor *sortDescriptor1 = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO comparator:^NSComparisonResult(NSDate *obj1, NSDate *obj2) { 
    return [[formatter stringFromDate:obj1] compare:[formatter stringFromDate:obj2]]; 
}]; 
NSSortDescriptor *sortDescriptor2 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO]; 
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, sortDescriptor2, nil]; 
[fetchRequest setSortDescriptors:sortDescriptors]; 
Cuestiones relacionadas