コア データ スタックに 2 種類のイベントが保存されており、それぞれにタイムスタンプがあります。各セクションが任意の長さ (1 日、1 週間など)UITableView
であるwith セクションでこれらのレコードを表示する良い方法があるかどうかに興味があります。
コア データ オブジェクトのタイムスタンプを、1 日の時間を切り捨ててセクション タイトルに変換する方法はありますか?
したがって、次のようになります。
October 5 < section title
Record 1 < records displayed in the section
Record 2
Record 3
October 6
Record 4
October 7
Record 5
...
-OR-
Week 1
Record 1
Record 2
Week 2
Record 3
...
この目標を達成するために私が現在使用しているものは次のとおりですが、各セクションが 1 日という制限があります。
しかし、私はこの要件について考えたことがなく、タイムスタンプだけのイベントのリストを持っているとしましょう。それらをセクションに分割するにはどうすればよいですか?
//the method used to convert a date into a number to store with the event
-(int)getDateIDFromDate:(NSDate*)date
{
int gmtOffset = [[NSTimeZone localTimeZone] secondsFromGMT];
int dateID =([date timeIntervalSinceReferenceDate]+gmtOffset)/86400;
return dateID;
}
//when inserting a record, the number is saved
newManagedObject.dayID = [NSNumber numberWithInt:[self getDateIDFromDate:date]];
//when retrieving, the number is used as a section key path
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"dayID" cacheName:@"Day"];
//the number gets converted back into the date.
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
// Display the authors' names as section headings.
// return [[[dataManager.dreamEventsController sections] objectAtIndex:section] name];
NSString* dayIndex = [[[dataManager.fetchedResultsController sections] objectAtIndex:section] name];
int dayFromReferenceDate = dayIndex.intValue;
return [dataManager.sectionDateFormatter stringFromDate:[NSDate dateWithTimeIntervalSinceReferenceDate:(dayFromReferenceDate+1)*86400]];
}