2012-02-07 21 views
12

NSFetchRequestを最初に注文し、同じ日の注文を名前で一致させたいとします。 私は日付を取得するためにUIDatePickerを使用してNSFetchRequestを日付順にソートし、アルファベット順に並べ替えます。

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

コアデータを使用して、それを保存して、このようなNSFetchRequestを並べ替える:

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

今、私の問題は、それが唯一の日付ではなく注文することですコアデータにはUIDatePickerが日付だけでなく時間も格納されています。だから同じ日であっても、同じ日に「名前」でソートされていないので、時が違うからです。 コアデータには、UIDatePickerからmm/dd/yyyy日時で保存するにはどうすればよいですか?

他の解決策はありますか?

+3

日付から時刻を削除する必要があります。 http://stackoverflow.com/questions/4187478/truncate-nsdate-objective-c –

+0

他に何かの時間情報が必要ですか?そうでない場合は、コアデータオブジェクトの時刻を設定するときに時間コンポーネントを0に設定することができます。必要な場合は、時間コンポーネントなしでNSDateまたはyyyymmdd文字列を使用する別の属性を追加する必要があります。 –

答えて

0

CoreDataはNSDateをサポートしますが、常に1時間が含まれます。私が考えることができる唯一のことは、時間を含まないタイムスタンプを持つカスタムのreadonlyプロパティを持ち、そのプロパティのソート記述子を作成することです。

5

日付の並べ替えにコンパレータブロックを使用して、日付をyyyyMMdd形式の文字列に変換します。

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]; 
関連する問題