Frage

Ich habe den folgenden Code:

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

Ich brauche den im Grunde die titleforheaderinsection zu konvertieren, die ein String Datum ist wie „2009.12.04 00.00.00 +1100“ ein schöneres kürzere Zeichenfolge suchen. Also habe ich versucht, es so etwas wie dateFormatter setDateStyle Converting, aber wenn ich Ausgang der NSLog zu trösten ich die folgende bekommen:

2009-12-22 09: 42: 10.156 app [94.614: 207] section 2009-12-04 00.00.00 +1100 2009-12-22 09: 42: 10,157 app [94.614: 207] convDate (null

Offensichtlich ist die convDate ist nicht immer alles, aber [sectionInfo name] sollte ein String sein. Ich habe es in seinen eigenen NSString Variable analysiert, so warum kann ich die dateFormatter auf sich umzusetzen?


Weitere Informationen Bit: Ich habe das Datum unter anderem analysieren früher auf, mit dem Code-Snippet zu sein:

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

Nun, wenn ich diese debuggen, im Wesentlichen die rohe Zeichenfolge „Sa 27. November 2009 17.16.00 -800“, aber wenn ich an der convDate aussehen kommt es heraus zu sein „2009-11-27 00.00 : 00 +1100" . Nicht sicher, warum, aber in jedem Fall, das ist, was wird gespeichert. Ich hätte es gedacht hätte die mit dem Stil i erwähnt, so dass, wenn ich das dateFormatter Format auf jede andere Art ändern, wäre es zu stopfen und convDate werden gleich Null.

an meinem Postcontroller Blick zurück: Ich habe ein paar Schnipsel von Interesse:

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

}

Ich hoffe, nach Datum zu sortieren, und in meinem Code, in titleForHeaderInSection, formatieren Sie mein String Datum mehr vorzeigbar aussehen.

Danke Jungs

War es hilfreich?

Lösung

Der Grund, warum Sie wurden unerwartetes Verhalten bekommen, weil bei der Analyse der Sie das Datumsformat wurden Einstellung

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

, die keine Zeitinformationen haben, weshalb es eine Zeitdifferenz in den Daten war.

Auch bei der Analyse des von Ihnen Einstellung convDate mit

NSDate *convDate = [dateFormatter dateFromString:string];

, die eine NSDate speichert und entscheidend NSFetchResultsController ist die description Wähler auf convDate aufrufen, weil es nicht ein NSString ist.

Ich bin nicht ganz sicher, warum NSDateFormatter konnte das ISO-Datumsformat nicht erkennen.

Andere Tipps

Der Grund, Ihr Code nicht funktioniert, weil

[sectionInfo name]

gibt ein NSString Objekt, keine NSDate Objekt, das durch

erforderlich ist
[dateFormatter stringFromDate:];

Sie können nicht einfach ein NSString zu einem NSDate gegossen.

Stattdessen

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

Auch, Autorelease ein Objekt nicht, es sei denn es einen bestimmten Grund, dies zu tun.

Ich fand die Lösung, indem Sie auf http: // iosdevelopertips. com / Kakao / Datum-Formatierer-Beispiele-take-2.html und mit http: //unicode.org/reports/tr35/#Date_Format_Patterns als Führer, gedebuggt ich meinen Code, bis ich, dass der Variable mit dem eingehenden Zeichenfolge

abgestimmt ist sichergestellt
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top