2012-02-07 16 views
12

Chcę zamówić NSFetchRequest najpierw według daty, a następnie, jeśli pasuje do tej samej kolejności dnia według nazwy. używam UIDatePicker uzyskać datę i go zapisać przy użyciu danych CoreSortowanie NSFetchRequest według daty, a następnie w kolejności alfabetycznej

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

i posortować NSFetchRequest takiego:

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

Teraz moim problemem jest to, że należy zamawiać wyłącznie według daty i nie przez nazwę, ponieważ UIDatePicker przechowywane w Core Data data, ale także godzinę. Więc nawet jeśli tego samego dnia, nie posortowane według "nazwy" w tym samym dniu, ponieważ godzina jest inna. Jak więc zapisać w danych podstawowych tylko datę mm/dd/rrrr, a nie de godz. Od UIDatePicker?

A może myślisz o jakimkolwiek innym rozwiązaniu?

+3

Musisz usunąć czas od daty. http://stackoverflow.com/questions/4187478/truncate-nsdate-objective-c –

+0

Potrzebujesz informacji o czasie na cokolwiek innego? Jeśli nie, możesz ustawić czas komponentów na 0 podczas ustawiania czasu głównego obiektu danych. Jeśli potrzebujesz, musisz dodać inny atrybut, który używa NSDate bez komponentów czasu lub ciągu yyyymmdd. –

Odpowiedz

0

CoreData obsługuje NSDate, ale zawsze zawiera godzinę. Jedyne, co mogę wymyślić, to mieć niestandardową, tylko do odczytu właściwość, która ma znacznik czasu bez godzin, a następnie utworzyć deskryptor sortowania dla tej właściwości.

5

Użyj bloku komparatora do sortowania daty, aby przekonwertować datę na ciąg znaków o formacie rrrrMMdd.

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]; 
Powiązane problemy