Iphone uitableview部分标题中的日期格式,请提供帮助

Iphone uitableview部分标题中的日期格式,请提供帮助,iphone,header,datepicker,Iphone,Header,Datepicker,首先让我说,我对iphone开发非常陌生,但我非常努力地学习,所以非常感谢各位专业人士提供的任何帮助!所以我有一个问题,如果有人能为我回答,那将是非常棒的。我正在研究更多的核心数据,并一直在使用苹果开发者网站上的核心数据书示例。这是一个非常直接的应用程序,但我正在尝试改变一些东西,我不知道如何去做,这让我发疯!!!本机,应用程序在tableview部分标题中显示作者,标题在单元格中。我想更改它,并将版权日期(这本书的属性之一)设置为章节标题。现在,我可以让它显示,但它以这种格式显示日期: 200

首先让我说,我对iphone开发非常陌生,但我非常努力地学习,所以非常感谢各位专业人士提供的任何帮助!所以我有一个问题,如果有人能为我回答,那将是非常棒的。我正在研究更多的核心数据,并一直在使用苹果开发者网站上的核心数据书示例。这是一个非常直接的应用程序,但我正在尝试改变一些东西,我不知道如何去做,这让我发疯!!!本机,应用程序在tableview部分标题中显示作者,标题在单元格中。我想更改它,并将版权日期(这本书的属性之一)设置为章节标题。现在,我可以让它显示,但它以这种格式显示日期:

2009-12-01 10:11:31-0700

但这不是正确的格式,我想使用这种格式:

12月1日星期二

可能使用以下代码:

NSDateFormatter*outputFormatter=[[NSDateFormatter alloc]init]

[outputFormatter setDateFormat:@“EEEE MMMM d”]

NSString*date=[outputFormatter stringFromDate:[NSDate date]]

但问题是,日期值来自日期选择器,我不知道(有这么多疯狂的“关键”业务)如何格式化来自选择器的日期值并将其放在节标题上。如果您有任何时间可以点击上面的苹果WB网站的链接,在回答我的问题之前四处看看,我们将不胜感激!!!!多谢各位

好的,这是我在save方法中输入的代码:

 // Pass current value to the edited object, then pop.
if (editingDate) {
    NSString *rawDate = (NSString *)datePicker.date;
    NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
    [outputFormatter setDateFormat:@"yyyy-MM-dd"];
    NSDate *date = (NSDate *)[outputFormatter dateFromString:rawDate]; 

    [outputFormatter setDateFormat:@"EEEE MMMM d"];
    NSString *formattedDateStr = (NSString *)[outputFormatter stringFromDate:date];

    [editedObject setValue:(NSDate *)formattedDateStr forKey:editedFieldKey];
}
不管什么原因,日期都不会保存在应用程序中,编译器会抛出以下错误:

调试器已退出,状态为0。 [会议于2009-12-02 09:51:26-0700开始。] 2009-12-02 09:51:47.342核心数据库[17981:20b] *-[\uu NSCFDate length]:发送到实例0x3e79850的无法识别的选择器 2009-12-02 09:51:47.343 CoreDataBooks[17981:20b]*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“***-[\uu NSCFDate length]:未识别的选择器发送到实例0x3e79850”


可能只是一个快速解决方案,我希望我至少在代码的正确半球,再次感谢您有时间提供的任何帮助或见解。

您不必担心关键业务,至少在这里更改日期格式。使用EditingViewController中的密钥业务自动更改book对象中的版权属性

因此,您只需更改该属性的显示位置。 在DetailViewController.m中,更改此方法:

- (NSDateFormatter *)dateFormatter {    
    if (dateFormatter == nil) {
        dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateStyle:NSDateFormatterMediumStyle];  //REMOVE
        [dateFormatter setTimeStyle:NSDateFormatterNoStyle];  //REMOVE
    }
    return dateFormatter;
}
为此:

- (NSDateFormatter *)dateFormatter {    
    if (dateFormatter == nil) {
        dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"EEEE MMMM d"];  //NEW LINE
    }
    return dateFormatter;
}
编辑:忘记提到实际显示是在同一文件的CellForRowatineXpath中完成的。但该显示代码使用类级变量dateFormatter,所以我们只需修改其初始化

编辑#2:您修改了示例代码以按图书版权日期对行进行分组。要修改章节标题中的日期格式,可能有一种更优雅的方法,但这里有一个粗略的解决方案。将RootViewController.m中的titleForHeaderInSection修改为:

- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
    NSString *rawDateStr = [[[fetchedResultsController sections] objectAtIndex:section] name];

    //convert default date string to NSDate...
    NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZ"];
    NSDate *date = [formatter dateFromString:rawDateStr];

    //convert NSDate to format we want...
    [formatter setDateFormat:@"EEEE MMMM d"];
    NSString *formattedDateStr = [formatter stringFromDate:date];

    return formattedDateStr;
}
上述更改假定您只按日期执行部分。如果不是,则需要检查当前分组是否按日期,否则它将尝试将作者的姓名或标题转换为日期并崩溃。您可能还需要添加空/无效日期检查

编辑#3:版权字段为NSDate,包含日期和时间。要仅按日期分组,编辑版权字段时,请按如下方式将时间部分设置为00(在EditingViewController.m的保存方法中):

然而,由于示例中苹果提供的样本数据已经包含版权字段中的时间,编辑或添加一本书不会将其与另一本日期相同的书放在同一组中,因为另一本书中仍然包含时间部分。如果编辑两本书并保存,则会清除两本书中的时间,并将它们显示在同一组中


更好的解决方案是告诉SortDescriptor只查看版权的日期部分,而不是版权的现状,但我还不知道如何做到这一点。

嘿,谢谢你的回答。我更改了这段代码,它的工作原理是,它在您离开日期选择器后立即更改了日期显示的格式,虽然仍然在“书本属性”视图中,但一旦您从那里保存,它仍然在sectionheader中显示相同的恼人格式。很可能是我在标题中显示日期的方式一开始就错了,这可能是它不起作用的原因。正确设置的最佳方法是什么?如果您能在这里提供任何帮助,我们将再次不胜感激。非常感谢您的时间。在使用NSFetchedResultsController时,可能有一种更优雅的方法来修改节标题文本,但我将很快将原始解决方案添加到主答案文本中。好的,我回来了。如果我真的很烦人,我感到非常抱歉,但有两个问题已经浮出水面,并没有立即显现出来。保存版权日期时,在“图书属性”屏幕内,日期显示正确,但在uitableview外部保存时,日期显示正确的日期,而不是月份。无论您选择哪个月,它都显示它是一月。很奇怪。第二个问题是,在本机应用程序中,如果有两本书是同一作者写的,那么作者是一个静态值,因此它可以比较,如果新书作者匹配一本已经不存在的书,那么它会自动将新书放在该作者的下面。我正在稍微调整应用程序的用途,如果日期值也是静态的,这将是理想的,这意味着该值没有经过比较的不断变化的时间值。因为现在我可以
    // Pass current value to the edited object, then pop.
if (editingDate) {
    NSDate *pickedDateTime = datePicker.date;

    NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
    [formatter setDateFormat:@"yyyy-MM-dd 00:00:00 -0000"];
    NSString *pickedDateStr = [formatter stringFromDate:pickedDateTime];
    pickedDateTime = [formatter dateFromString:pickedDateStr];

    [editedObject setValue:pickedDateTime forKey:editedFieldKey];
}