在我的Core Data应用程序中,我使用的是FetchedResultsController。通常要在UITableView中为标题设置标题,您可以实现以下方法:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[<#Fetched results controller#> sections] objectAtIndex:section];
return [sectionInfo name];
}
其中[sectionInfo name]返回NSString。
我的sectionKeyPath基于一个NSDate,除了它给我的部分标题之外,这一切都很好用的是原始日期描述字符串(例如12/12/2009 12:32:32 +0100)看起来有点像把头弄得一团糟!
所以我想在这个上使用日期格式化程序来制作一个很好的标题,如“2010年4月17日”但我不能用[sectionInfo名称]这样做,因为这是NSString!任何想法?
非常感谢
答案 0 :(得分:14)
我找到了解决方案:
- (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;
}
请仔细看看,如果你知道更好的方法,请说出来!
否则,如果您遇到类似的问题,我希望这有帮助!
答案 1 :(得分:1)
在iOS 4.0及更高版本中,使用[NSDateFormatter localizedStringFromDate]类方法,您不必担心管理NSDateFormatter实例。否则,这似乎是唯一的方法。
答案 2 :(得分:0)
这是答案的Swift版本:
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
}
}