我有以下代码:

   -(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]];
 }

我基本上需要到titleforheaderinsection这是一个字符串日期,如“2009-12-04 00:00:00 1100”,以一个更好看更短的字符串转换。所以,我曾尝试使用类似dateFormatter setDateStyle它转换,但是当我输出的NSLog安慰我得到如下:

2009-12-22 09:42:10.156的应用[94614:207] sectionName 2009-12-04 00:00:00 1100 2009-12-22 09:42:10.157的应用[94614:207] convDate(空

显然convDate没有得到任何东西,但是[sectionInfo名]应该是一个字符串。我已经解析它变成了自己的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];

现在,当我调试这个,基本上是原始字符串是“星期六,2009年11月27日17:16:00 -800”但是当我看convDate它出来是“2009-11-27 00:00 :00 1100" 。不知道为什么,但在任何情况下,那是什么囤积。我本来以为会匹配我所提到的风格,所以如果我的dateFormatter格式更改为任何其他类型的,那就东西了,并convDate成为零。

回顾我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,格式化我的字符串日期看起来更像样。

由于球员

有帮助吗?

解决方案

你得到意外行为的原因是因为在分析过程中你设置日期格式

[dateFormatter setDateFormat:@"eee, dd MMM yyyy"];

不具有时间信息,这就是为什么有一个在日期的时间差。

此外,解析你设定convDate用期间

NSDate *convDate = [dateFormatter dateFromString:string];

,其存储一个NSDate和关键 NSFetchResultsController呼吁descriptionconvDate选择器,因为它不是一个NSString。

我不完全知道为什么NSDateFormatter无法识别ISO日期格式。

其他提示

您的代码不起作用的原因是因为

[sectionInfo name]

返回一个NSString对象,而不是一个NSDate对象,这是由

需要
[dateFormatter stringFromDate:];

您不能简单地投一个NSString到一个NSDate。

相反,

- (NSString *)tableView:(UITableView *)table titleForHeaderInSection:(NSInteger)section
{
    id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
    NSString *sectionName = [sectionInfo name];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];

    NSString *convDate = [dateFormatter stringFromDate:[dateFormatter dateFromString:sectionName]];
    [dateFormatter release];

    return convDate;
}

此外,除非有特定的理由这样做不自动释放的对象。

我发现通过转到 HTTP溶液:// iosdevelopertips。 COM /可可/日期格式化-例子通吃2.HTML 和使用 HTTP: //unicode.org/reports/tr35/#Date_Format_Patterns 中作为指导,我调试我的代码,直到我确保该变量与进入的字符串匹配

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top