2012-02-07 16 views
12

NSFetchRequest numaralı siparişi vermek istiyorum. Ben tarihi almak için bir UIDatePicker kullanmak veNSFetchRequest tarihine ve ardından alfabetik sıraya göre sırala

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

Çekirdek Verileri kullanarak kaydedin ve bunun gibi NSFetchRequest sıralamak:

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

Şimdi benim sorunum sadece tarihe göre değil, sipariş olmasıdır adından da anlaşılacağı gibi, UIDatePicker, Çekirdek Verilerde saklanır, ancak saat de. Aynı gün bile olsa, aynı günde "isim" ile sıralanmadığı için saat farklıdır. Öyleyse, çekirdek verilere yalnızca UIDatePicker'dan saat değil, saat/gg/yyyy tarihini nasıl kaydederim?

Yoksa başka bir çözüm var mı?

+3

Tarihi bu saatten kaldırmanız gerekir. http://stackoverflow.com/questions/4187478/truncate-nsdate-objective-c –

+0

Başka bir şey için zaman bilgisine mi ihtiyacınız var? Eğer değilse, çekirdek veri nesnesinin zamanını ayarlarken zaman bileşenlerini 0'a ayarlayabilirsiniz. İhtiyacınız varsa, zaman bileşenleri olmadan NSDate veya bir yyyymmdd dizesi kullanan başka bir özellik eklemeniz gerekir. –

cevap

0

CoreData, NSDate desteklerini destekler, ancak her zaman saati içerecektir. Düşünebildiğim tek şey, saatler içermeyen bir zaman damgası olan ve daha sonra bu özellik için sıralama tanımlayıcısı oluşturan özel, salt okunur bir özelliğe sahip olmaktır.

5

Tarihi yyyyMMdd biçiminde bir dizeye dönüştürmek için tarih sıralamanız için bir karşılaştırma bloğu kullanın.

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]; 
İlgili konular