News-Liste (Dictionary) nach Uhrzeit sortieren.

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • News-Liste (Dictionary) nach Uhrzeit sortieren.

    Hallo Zusammen,

    ich baue mir gerade eine News-Liste bei der nach Datum und nach der Uhrzeit sortiert werden soll.
    Die Section meiner UITableView sind das Datum - die Sortierung (hier als Array kommend) funktioniert einwandfrei.

    Komplizierter wird es mit den einzelnen News in einer Section. Diese hole ich ebenfalls aus einem JSON-String, packe alles in ein Dictionary und verarbeite es dann weiter.
    Leider kann man Dictionary nicht sortieren - ich weiß. Man kann natürlich die Keys sortieren - aber was habe ich dann gewonnen?

    Schaut mal, so sieht es im Augenblick aus (funktioniert nur nicht, das übergeben des "sortedTempDicionarys allValues" ist witzlos, da - natürlich - völlig unsortiert. Ich stehe etwas aufm Schlauch Leute. Wie würdet ihr das lösen?

    Quellcode

    1. NSArray* sortedKeys = [[tempNewsDictionaries allKeys] sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
    2. NSDateFormatter *dateFormater = [[NSDateFormatter alloc] init];
    3. [dateFormater setDateFormat:@"HH:mm"];
    4. NSString *date1String = b;
    5. NSString *date2String = a;
    6. NSDate *date1 = [dateFormater dateFromString:date1String];
    7. NSDate *date2 = [dateFormater dateFromString:date2String];
    8. return [date1 compare:date2];
    9. }];
    10. NSMutableDictionary* sortedTempDictionary = [[NSMutableDictionary alloc] init];
    11. for (NSString* timeKey in sortedKeys)
    12. {
    13. NSLog(@"timeKey: %@", timeKey);
    14. [sortedTempDictionary setObject:[tempNewsDictionaries valueForKey: timeKey] forKey:timeKey];
    15. }
    16. // Save Dictionarys im Haupt-News-Dictionary:
    17. [sortedNewsDctionary setObject:[sortedTempDictionary allValues] forKey:[NSString stringWithFormat:@"%@",lastDateString]];
    Alles anzeigen



    LG und danke im voraus,
    Florian
  • So gehe ich es im Augenblick an:

    Quellcode

    1. - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    2. static NSString *CellIdentifier = @"NewsCell";
    3. NeuigkeitenCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
    4. NSString *sectionKeyName = [sections objectAtIndex:indexPath.section];
    5. NSArray *newsForDate = [sortedNewsDctionary objectForKey:sectionKeyName];
    6. NSDictionary *news = [newsForDate objectAtIndex:indexPath.row];
    7. // Setze Werte für die TableCell (Wichtig für die Weiterverarbeitung, z.B. beim Übergeben von Werten über die Segue):
    8. cell.created_date = [news objectForKeyedSubscript:@"created_date"];
    9. cell.created_time = [news objectForKeyedSubscript:@"created_time"];
    10. cell.message = [news objectForKeyedSubscript:@"message"];
    Alles anzeigen


    Die Schlüssel sind im Augenblick das Datum.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Flolle ()

  • Wie Du richtig festgestellt hast, lassen sich Dictionaries nicht sortieren.
    Das liegt daran, dass es sich bei Dictionaries um eine generische Möglichkeit der Sammlung von Daten handelt.

    Du legst komplexe Datenstrukturen im Dictionary ab, die sich für jeden Eintrag im Dictionary wiederholen.
    Das kann man natürlich machen. Sinnvoller wäre (unter Objective-C) allerdings die Nutzung eines speziellen Objektes.

    Natürlich ist es bequem, via NSJSONSerialisation den ganzen JSON Kram in ein Dictionary umzuwandeln und damit weiterzuarbeiten. Allerdings ist das nur so lange bequem wie man generisch darauf zugreift. Sortierung ist nicht generisch, da für eine Sortierung gewisse Annahmen erfüllt sein müssen.

    Wie sortierst Du ein gültiges und mögliches Dictionary @{ @"Key":@"Value", @"Number":@(42), @"UserInfo":@{@"Title":"none"}, @"Data":@( @"snafu", @"fubar", "ydkj") };?
    Gar nicht.

    Definiere Dir ein 'NewsEntry' Objekt. Befülle etliche davon mit den Daten aus Deinem JSON (über das generische Dictionary) uns schmeiß sie in Dein Datenarray.
    Dann kommst Du via NSPredicate an die Sections (Anzahl und Namen)
    Weiterhin kannst Du via NSSortDescriptor die Inhalte der einzelnen Sections sortieren.

    Alternativ bildest Du die gesamte Struktur gleich Deinen Vorstellungen entsprechend im Array ab, so dass Du bequem über den Index Path darauf zugreifen kannst.
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P