Setting UITableView headers from NSFetchedResultsController
cocoa, cocoa-touch, core-data, iphone
Solution
I ended up adding a new property `day` to my `NSManagedObject` subclass to get a formatted date string.
@property (nonatomic, readonly) NSString * day;
@property (nonatomic, retain) NSDateFormatter * dateFormatter
Sythesize the dateFomatter. @synthesize dateFormatter;
I initialize the date formatter in awakeFromFetch and awakeFromInsert.
self.dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[self.dateFormatter setDateStyle:NSDateFormatterMediumStyle];
The accessor for `day`.
- (NSString *)day {
NSDate *date = self.startDate;
return [self.dateFormatter stringFromDate:date];
}
I then set my section name keypath to look at `day`; you shouldn't need to make any changes to your sort descriptors.
Problem
I have a `NSFetchedResultsController` which is fetching objects from a `NSManagedObjectContext`. I'm using the results to populate a UITableView. I'm filtering with these two sort descriptors. ``` NSSortDescriptor *lastOpened = [[NSSortDescriptor alloc] initWithKey:@"lastOpened" ascending:NO]; NSSortDescriptor *titleDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES]; ``` And when I create the `NSFetchedResultsController`, I sort the sections via `sectionNameKeyPath:@"lastOpened"`. Right now my sections display the standard format like 2009-07-02 20:51:27 -0400 and since no two can be opened at the same time, they are all unique. I need them to cover range of date/times, such as an entire day, and be in a human-readable form. Something like Thursday, July 2. Thanks! Edit: This is all inside a `UITableViewController`. Here's some more code. ``` - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { // Display the dates as section headings. return [[[fetchedResultsController sections] objectAtIndex:section] name]; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section]; return [sectionInfo numberOfObjects]; } ```