私のコアデータモデルでは、日付属性を持つエンティティがあります。タイトルに示すように、このエンティティを(週)日単位でグループ化したいと思います。平日のコアデータでのグループ化
問題は、日付がタイムスタンプとして多かれ少なかれ格納されているため、私のエンティティを適切にグループ化/フィルタリングできる述語を作成する方法がわかりません。
私はおそらく毎日のフェッチをしなければならないとわかったので、以下の方法で作成しました。 コードは私の助けが必要でした。
- (NSFetchedResultsController *)fetchedResultsController:(NSDate *)day {
if(fetchedResultsController != nil)
return fetchedResultsController;
// Create and Configure Request
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext];
[request setEntity:entity];
// Predicate
// pseudo code where i'm clueless is marked by "<" and ">" - start
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"DateAttribute BETWEEN <first second of day> AND <last second of day>"];
// or
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"<dayofmonth-month-year of DateAttribute> LIKE <dayofmonth-month-year of day>"];
[request setPredicate:predicate];
// pseudo code where i'm clueless is marked by "<" and ">" - end
// Sort descriptors
NSSortDescriptor *titleDescriptor = [[NSSortDescriptor alloc] initWithKey:sortDescriptorName ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObject:titleDescriptor];
[request setSortDescriptors:sortDescriptors];
// create and init fetchResultsController
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
self.fetchedResultsController = aFetchedResultsController;
fetchedResultsController.delegate = self;
//Memory
[request release];
[titleDescriptor release];
[aFetchedResultsController release];
return fetchedResultsController;
}
私は本当に任意の助けをいただければと思います。ありがとう
あなたの包括的な回答に感謝します。 "NSFetchedResultsControllerを初期化するときに、日ごとにグループ化したい場合は、NSFetchedResultsControllerを初期化するときに、DateAttributeをsectionNameKeyPath引数として渡します。この場合も、述語を指定する必要はありません。 それがうまくいけば、そうするとDateAttributeの値でグループ分けされます(時間が含まれています、例えば "2009-07-02 20:51:27 -0400") p.s.私の究極の目標は、平日のリストを取得し、そのうちの1つをクリックすると、その日に接続されたすべてのエンティティが別のテーブルビューで開きます。 – gabtub
これは、私のサンプルコードで示したのと同じテクニックを使用して、時間なしでDateAttributeをエンティティに格納することで実現できます。NSDateオブジェクト(DateAttribute)から始めて、まず日付コンポーネントを抽出してから、これらのコンポーネント(したがって、時間は含まれません)。あなたのエンティティに格納するのは、この最後のNSDateオブジェクトです。そして、その日に基づいてオブジェクトを検索することは、説明したように動作します。 –
最初はデータモデルを変更したくないのですが、それは他の誰かによって指定されていたからです。しかし、幸いにも時刻と日付を格納する必要はありませんでしたが、 >作品 ありがとう! – gabtub