2012-02-07 12 views
12

Desidero ordinare un NSFetchRequest prima per data e poi, se corrisponde allo stesso ordine del giorno per nome. Io uso un UIDatePicker per ottenere la data e l'salvarlo utilizzando Core DataOrdina NSFetchRequest per data e quindi in ordine alfabetico

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

e ordinare la NSFetchRequest in questo modo:

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

Ora il mio problema è che essere ordinata solo per data e non per nome perché il UIDatePicker memorizzato in dati di base la data, ma anche l'ora. Quindi, anche se lo stesso giorno, non ordinato per "nome" nello stesso giorno perché l'ora è diversa. Quindi, come faccio a salvare nei dati principali solo la data mm/gg/aaaa e non l'ora da uno UIDatePicker?

Oppure pensi ad altre soluzioni?

+3

È necessario rimuovere l'ora dalla data. http://stackoverflow.com/questions/4187478/truncate-nsdate-objective-c –

+0

hai bisogno di informazioni sull'ora per qualcos'altro? In caso contrario, è possibile impostare i componenti del tempo su 0 quando si imposta l'ora dell'oggetto dati principale. Se necessario, è necessario aggiungere un altro attributo che utilizza NSDate senza componenti temporali o una stringa yyyymmdd. –

risposta

0

CoreData supporta NSDate, ma includerà sempre l'ora. L'unica cosa che posso pensare è di avere una proprietà personalizzata, di sola lettura che ha un timestamp senza ore incluse e quindi creare un descrittore di ordinamento per quella proprietà.

5

Utilizzare un blocco di confronto per l'ordinamento della data per convertire la data in una stringa con formato aaaaMMgg.

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]; 
Problemi correlati