2010-11-21 11 views
2

Ich habe eine NSArray, und ich sortieren sie durch sein Objekt „veröffentlicht“ Eigenschaft in absteigender Reihenfolge, neueste zuerst:Wie NSArray in NSDictionary von NSDate des Array-Objekts Tag des Jahres aufzuteilen?

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"published" ascending:YES]; 
NSArray *descps = [[NSArray alloc] initWithObjects:[sortDescriptor reversedSortDescriptor], nil]; 
[storiesLocal sortUsingDescriptors:descps]; 
[descps release]; 
[sortDescriptor release]; 

So, jetzt möchte ich von jedem Tag dieses Array aufzuteilen, so dass ich benutze es mit einem UITableView. In meinem Beispiel wäre jedes Datum ein Tabellenansichts-Header. Also, wenn mein Beispiel sortiert Array (storiesLocal) Daten wie solche hatte:

2010-04-05 10:32:00 
2010-04-05 06:20:12 
2010-04-02 09:23:02 
2010-04-02 03:20:34 
2010-04-01 04:22:34 

Dann würde ich Tableview-Header wie "April-5", "April-2", "1. April" haben. Daher würde jeder 2, 2 und 1 Zeile unter jedem entsprechenden Header haben

Im Wesentlichen wäre mein gewünschtes Ergebnis ein NSDictionary. Es ist jeder Schlüssel wäre ein Datum (2010-04-02), jeder Wert wäre ein NSArray der richtigen Objekte, um damit zu gehen. Alle diese sollten nach Datum sortiert sein. Das neuste zuerst.

Ich habe ungefähr 3 Versuche durchlaufen und ist jedes Mal gescheitert, den Code löschend, den ich schrieb.

Bearbeiten: Da ein NSDictionary eine ungeordnete Liste ist, könnte es besser sein, ein Array von Wörterbüchern zu haben, jedes dict enthält einen Schlüssel für das Datum und einen Schlüssel für das stories-Array, da die Reihenfolge sehr wichtig ist.

Antwort

0

Dies ist nicht getestet, sondern versuchen, so etwas wie:

NSArray *descps as above. 

NSDateFormatter *in_formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; 
NSDateFormatter *out_formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"MMMM d"]; 

NSString *todayStr = 
[formatter release]; 

NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; 

for (ObjectType *obj in descps) { 
    NSDate *date = [in_formatter dateFromString:[obj published]]; 
    NSString *day = [out_formatter stringFromDate:date]; 

    NSArray *array = [dict valueForKey:day]; 
    if (array == nil) { 
    array = [[NSMutableArray alloc] init]; 
    [dict setValue:array forKey:day]; 
    [array release]; 
    } 

    [array addObject:obj]; 
} 

[in_formatter release]; 
[out_formatter release];