您好我对iOS开发相对较新(如果此问题已经解决,请提前抱歉)我已经在此应用程序中使用此子模块,用户必须输入每日数值数据,然后列表显示在一个tableview。问题是我试图以MMMM yyyy格式的NSdate变量“inputDate”进行排序(例如:名为:2013年2月的部分)。但是,即使在同一个月输入了一个值,它也不会在同一部分中对它们进行分组(参见最后的链接以供说明)
以下是与问题相关的代码部分:
//The Fetch result controller
- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
// Create and configure a fetch request with the PVMessWert entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"PVMessWert" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
// Create the sort descriptors array.
NSSortDescriptor *datumsort = [[NSSortDescriptor alloc] initWithKey:@"inputDate" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:datumsort, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
// Create and initialize the fetch results controller.
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"inputDate" cacheName:@"Root"];
_fetchedResultsController.delegate = self;
return _fetchedResultsController;
}
然后:titleForHeaderInSection:
- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section
{
id <NSFetchedResultsSectionInfo> sectionInfo = [[self.fetchedResultsController sections] objectAtIndex:section];
NSArray *objects = [sectionInfo objects];
NSManagedObject *managedObject = [objects objectAtIndex:0];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setDateFormat:@"MMMM yyyy"];
NSDate *headerDate = (NSDate *)[managedObject valueForKey:@"inputDate"];
NSString *headerTitle = [formatter stringFromDate:headerDate];
return headerTitle;
}
然后,Dateformatter函数:
- (NSDateFormatter *)dateFormatter
{
static NSDateFormatter *dateFormatter = nil;
if (dateFormatter == nil) {
dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
}
return dateFormatter;
}
为了解决问题,详细介绍了detailledListView
的截图网址:http://i.stack.imgur.com/j8Kvz.png
提前感谢您的帮助。
答案 0 :(得分:0)
sectionNameKeyPath
应该是字符串,而不是日期。通常,您可以向实体添加transient属性,并将其设置为节标识符的字符串版本(在本例中为inputDate
)。瞬态值将是您当前使用的字符串headerTitle
,并且可以以相同的方式生成。您可以使用KVO或保存托管对象来触发它。
答案 1 :(得分:0)
您好(很抱歉写了太多关于此事的信息)。
我能够通过添加一个字符串属性(核心数据)来将转换的NSDates存储到NSString来解决这个问题:
- (NSString *)dateToString {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setDateFormat:@"MMMM yyyy"];
NSDate *headerDate = (NSDate *)[self valueForKey:@"inputDate"];
NSString *headerTitle = [formatter stringFromDate:headerDate];
return headerTitle;
}
并获取请求,其中dateToString是关键路径。
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"dateToString" cacheName:@"Root"];
希望这对同样情况下的其他人有用