問題が発生しましたが、解決できるかどうか疑問に思っています。CoreDataとNSFetchedResultsControllerを使用するUITableViewがあります。私のアプリの大部分は、日付に基づいて物事を整理することです。理想的には、TableViewを3つの日付範囲に基づいてセクションに分割したいと思います。これらの範囲は、現在から2日の間、2日から6日の間、および10日以降になります。ユーザーはUIDatePickerを持っており、日付を入力すると、これらの整理されたセクションの1つに自動的に配置されます。これで、テーブルビューを単一の日付ごとにセクションに簡単に分割する方法はわかりましたが、各セクションに時間範囲があるようにする方法はわかりません。手伝ってくれるかもしれない人に感謝します。
質問する
644 次
2 に答える
1
これを自分でやっただけです。最終的に、コア データ オブジェクトはセクションに分類され、それぞれが 1 日幅になります。複数のオブジェクトが 1 つのセクションにある場合があります。
//at a point where you define your fetched results controller
//add @"sectionTitle" as sectionNameKeyPath:
//...
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:@"sectionTitle" cacheName:@"CacheName"];
//....
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
NSString* dateString = [[[self.sleepQualityController sections] objectAtIndex:section] name];
return dateString;
}
//add this to your managed object's header file:
@property(nonatomic,assign)NSString* sectionTitle;
//this goes into your managed object's implementation file
-(NSDate *)dateWithOutTime:(NSDate *)datDate
{
if( datDate == nil ) {
datDate = [NSDate date];
}
NSDateComponents* comps = [[NSCalendar currentCalendar] components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit fromDate:datDate];
return [[NSCalendar currentCalendar] dateFromComponents:comps];
}
-(NSString*)sectionTitle
{
NSDateFormatter* dateFormaterWeekdayMonthDay = [[NSDateFormatter alloc] init];
dateFormaterWeekdayMonthDay.dateStyle = NSDateFormatterLongStyle;
return [NSString stringWithFormat:@"%@", [dateFormaterWeekdayMonthDay stringFromDate:[self dateWithOutTime:self.date]] ];
}
于 2012-11-18T02:55:56.290 に答える
0
フェッチ要求でNSExpressionsを使用することを検討します。フェッチ要求でSQLのような式を使用することに関する適切なドキュメントを見つけるのは難しい場合があります。ただし、クエリで使用する独自のブロックを作成することもできます。これはかなりキラーです。
基本的に必要なのは、セクション名の文字列を返すNSExpressionです。これは、セクション名のキーパスに使用するようにNSFetchedResultsControllerに指示できます。式をフェッチ要求に追加するには、式の周囲にNSExpressionDescriptionを作成する必要があります。
これがあなたを正しい方向に導いてくれることを願っています!
FWIW、私は通常SQL風のソリューション(基本的には日付フィールドを比較して3つの値の1つを選択する「case」式を選択する)を実行する傾向がありますが、Core Dataを使用すると、スレッジハンマーを引き出す方が簡単な場合があります(むしろ、それが彼らが私たちに望んでいることのように感じます)。
于 2012-06-15T15:46:28.217 に答える