У меня есть следующий код:
-(NSString *)tableView:(UITableView *)table titleForHeaderInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
NSString *sectionName = [sectionInfo name];
NSLog(@"sectionName %@", sectionName);
NSString *convDate = [dateFormatter stringFromDate: (NSDate *)sectionName];
NSLog(@"convDate %@", convDate);
return [NSString stringWithFormat:@"%@", [sectionInfo name]];
}
Мне в основном нужно преобразовать заголовок заголовка для заголовка, который представляет собой строковую дату, например "2009-12-04 00:00:00 +1100", в более короткую выглядящую строку. Поэтому я попытался преобразовать его, используя что-то вроде dateFormatter setDateStyle, но когда я вывел NSLog на консоль, я получил следующее:
2009-12-22 09: 42: 10.156 app [94614: 207] sectionName 2009-12-04 00:00:00 +1100
2009-12-22 09: 42: 10.157 приложение [94614: 207] convDate (null
Очевидно, что convDate ничего не получает, но [sectionInfo name] должно быть строкой. Я проанализировал его в своей собственной переменной NSString, так почему я не могу реализовать на нем dateFormatter?
Немного больше информации: я анализирую дату среди прочего ранее, с фрагментом кода:
if ([currentElement isEqualToString: @"date"]) {
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init] ;
[dateFormatter setDateFormat:@"eee, dd MMM yyyy"];
NSDate *convDate = [dateFormatter dateFromString:string];
if (self.isComment){
[currentComment setDate: convDate];
}else if (self.isPost)
NSLog(@"convDate is %@", convDate);
[currentPost setDate: convDate];
Теперь, когда я отлаживаю это, по сути, сырой строкой является «Sat, 27 Nov 2009 17:16:00 -800», но когда я смотрю на convDate, она оказывается «2009-11-27 00:00 : 00 + 1100 ". Не уверен, почему, но в любом случае, это то, что хранится. Я бы подумал, что он будет соответствовать стилю, который я упомянул, поэтому, если я изменю формат dateFormatter на любой другой тип, он заполняется, и convDate становится равным nil.
Оглядываясь назад на свой постКонтроллер: У меня есть несколько интересных фрагментов:
- (NSFetchedResultsController *)fetchedResultsController {
if (fetchedResultsController == nil) {
NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
[fetchRequest setEntity:[NSEntityDescription entityForName:@"Post" inManagedObjectContext: ApplicationController.sharedInstance.managedObjectContext]];
NSArray *sortDescriptors = nil;
NSString *sectionNameKeyPath = @"date";
NSPredicate *pred = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"(PostSite.name like '%@')", self.site.name]];
[fetchRequest setPredicate:pred];
sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc]
initWithKey:@"date" ascending:NO] ];
[fetchRequest setSortDescriptors:sortDescriptors];
fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:
ApplicationController.sharedInstance.managedObjectContext
sectionNameKeyPath:sectionNameKeyPath cacheName:@"PostCache"];
}
return fetchedResultsController;
}
Я надеюсь отсортировать по дате и в моем коде в titleForHeaderInSection отформатировать строковую дату, чтобы она выглядела более презентабельно.
Спасибо, ребята