私は次のコードを持っています:
-(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」のような文字列の日付であるtitleforheaderinsectionを、見栄えの良い短い文字列に変換する必要があります。そこで、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 app [94614:207] convDate(null
明らかに、convDateは何も取得していませんが、[sectionInfoname]は文字列である必要があります。それを独自の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-2700:00:00+」になります。 1100」。理由はわかりませんが、いずれにせよ、それが保存されます。私が言及したスタイルと一致すると思っていたので、dateFormatter形式を他のタイプに変更すると、詰め込まれ、convDateがnilになります。
postControllerを振り返って:興味のあるスニペットがいくつかあります:
- (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で、文字列の日付をより見やすくなるようにフォーマットしたいと考えています。
みんなありがとう