NSFetchedResultsController titleForHeaderInSection with formatted NSDate

前端 未结 3 1559
一生所求
一生所求 2021-02-10 10:22

In my Core Data app I am using a FetchedResultsController. Usually to set titles for headers in a UITableView you would implement the following method like so:

-         


        
相关标签:
3条回答
  • 2021-02-10 10:27

    I found a solution:

    - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
        //Returns the title for each section header. Title is the Date.
        id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
        NSArray *objects = [sectionInfo objects];
        NSManagedObject *managedObject = [objects objectAtIndex:0];
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        [formatter setDateStyle:NSDateFormatterMediumStyle];
        NSDate *headerDate = (NSDate *)[managedObject valueForKey:@"itemDate"];
        NSString *headerTitle = [formatter stringFromDate:headerDate];
        [formatter release];
        return headerTitle;
    }
    

    Please look over this, if you know of a better way please say!

    Otherwise if your stuck with a similar problem I hope this helps!

    0 讨论(0)
  • 2021-02-10 10:27

    This is the Swift version of the answer:

    override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {        
        let sectionInfo = fetchedResultsController.sections![section]
        let objects = sectionInfo.objects
        if let topRecord:NSManagedObject = objects![0] as? NSManagedObject  {
            let formatter = DateFormatter()
            formatter.dateStyle = .medium
            return formatter.string(from: topRecord.value(forKey: "itemDate") as! Date)
        } else {
            return sectionInfo.indexTitle
        }
    }
    
    0 讨论(0)
  • 2021-02-10 10:38

    In iOS 4.0 and later, use the [NSDateFormatter localizedStringFromDate] class method and you won't have to worry about managing the NSDateFormatter instance. Otherwise this seems to be the only way to do it.

    0 讨论(0)
提交回复
热议问题