CoreData eigene Sortorder mit Date

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

  • CoreData eigene Sortorder mit Date

    Moin Moin,
    wahrscheinlich ist es einfach noch zu früh aber ich steh etwas auf der Leitung

    ich habe eine App mit TableView, CoreData und FetchedResultsController
    ich zeige Daten in der App an und sortiere sie nach dem Datum auf oder absteigend je nach dem worauf der Benutzer gerade Bock hat
    es sind jährliche Termine die jedes Jahr wiederkommen, zB Geburtstage

    jetzt wäre es aber nett die Daten zu sortieren nach "ab heute" also heute ist der 24.01. dann soll der erste in der TableView der Tag vom 25.01. sein und nicht der vom 23.01.(der soll dann der Letzte sein)

    meine Idee war es jetzt meinem CoreDataModel ein weiteres Attribut hinzuzufügen "sortOrderIndex", wenn das nun ausgewählt wird renn ich einmal durch die Daten durch schaue welcher Tag heute ist und welcher der Nächste ist und der bekommt dann 0 und passe das bei allen entsprechend an und ändere für den FetchRequest die SortOrder

    irgendwie wirkt das falsch und vorallem umständlich, bekommt man das einfacher umgesetzt, gibts da ne Sortorder die ich bisher nicht gesehen habe?
    Ich weiß nicht immer wovon ich rede aber ich weiß das ich Recht habe. :saint:
  • nope leider nicht

    ich habe ein Model für einen Termin z.B. so

    Quellcode

    1. @property (nonatomic, retain) NSDate * date;
    2. @property (nonatomic, retain) NSNumber * uniqueID;

    und dann kann man die beim Abrufen in seinen SortDescriptor anpassen

    Quellcode

    1. NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES];
    meine erste Idee wäre jetzt das @"date" durch @"sortOrderIndex" auszutauschen, dafür muss ich halt nur jedes mal alle Termine anpassen

    EDIT:
    kann man das über ein Predicate lösen?
    Ich weiß nicht immer wovon ich rede aber ich weiß das ich Recht habe. :saint:
  • warum erstellst du nicht einfach eine methode die zurückgibt ob der geburtstag noch dieses jahr ist. dann kannst du das ja im sortdescriptor-array verwenden wie ichs oben in der query angedacht habe.
    Geburtstage würd ich übrigens nicht als NSDate speichern sondern einfach als nummer. Zb 19701231 für den 31. dez 1970
  • gritsch schrieb:

    warum erstellst du nicht einfach eine methode die zurückgibt ob der geburtstag noch dieses jahr ist. dann kannst du das ja im sortdescriptor-array verwenden wie ichs oben in der query angedacht habe.
    die sortdescripter-array Geschichte macht der Fetchresultscontroller für einen, man hat hier nicht ein datasource Array im eigentlichen Sinne (sofern ich dich hier richtig verstanden habe)
    ich will dann ja auch nicht nur die sehen die noch dieses Jahr sind, sondern die im nächsten Jahr sind aber kleiner Tag und Monat sollen ja auch in der TableView angezeigt werden
    zusätzlich wollte ich ja eig nicht jeden Termin anfassen, hatte gehofft das man hier etwas mehr "geschenkt" bekommt

    gritsch schrieb:

    Geburtstage würd ich übrigens nicht als NSDate speichern sondern einfach als nummer. Zb 19701231 für den 31. dez 1970
    Geburtstage war nur ein Beispiel, es gibt auch Jahrestage und Hochzeitstage (und deren Jubiläen etc.) da sind mir die Sachen die mir Date mitbringt schon hilfreich
    Ich weiß nicht immer wovon ich rede aber ich weiß das ich Recht habe. :saint:
  • du musst ja nicht jeden termin anfassen wenn dir eine methode berechnet ob der gebrutstag noch dieses jahr ist oder nicht.
    die methode kann dir ja auch gleich einen passenden sort-index zurückgeben. Einfach den gebrutstag numerisch codieren wie ich oben gezeigt habe und falls er erst nächstes jahr wieder ist dann noch ne 1 vorne dran stellen. schon kannst du damit sortieren.

    Und auch bei feiertagen, jahrtagen etc gilt wieder dass du den tag wissen willst und nicht eine uhrzeit mit drin (wie bei date) denn sonst musst du mit zeitzonen aufpassen. sonst verschieben sich solche tage mal ganz schnell auf einen tag vorher oder nachher (grad wo die app genutzt wird).
  • gritsch schrieb:

    du musst ja nicht jeden termin anfassen wenn dir eine methode berechnet ob der gebrutstag noch dieses jahr ist oder nicht.
    die methode kann dir ja auch gleich einen passenden sort-index zurückgeben. Einfach den gebrutstag numerisch codieren wie ich oben gezeigt habe und falls er erst nächstes jahr wieder ist dann noch ne 1 vorne dran stellen. schon kannst du damit sortieren.

    muss zugeben das ich das nicht ganz nachvollziehen kann
    - alle Termine sind jedes Jahr

    wenn ich heute nehme

    20170124

    und ich habe folgende Termine

    20170112
    20170123
    20170125
    20170630
    20171212

    dann soll in der TableView stehen

    20170125
    20170630
    20171212
    20180112
    20180123

    dafür müsste ich doch jetzt jeden termin anfassen oder die Methode für jeden Termin aufrufen

    gritsch schrieb:

    Und auch bei feiertagen, jahrtagen etc gilt wieder dass du den tag wissen willst und nicht eine uhrzeit mit drin (wie bei date) denn sonst musst du mit zeitzonen aufpassen. sonst verschieben sich solche tage mal ganz schnell auf einen tag vorher oder nachher (grad wo die app genutzt wird).
    ok das habe ich nicht bedacht, danke
    Ich weiß nicht immer wovon ich rede aber ich weiß das ich Recht habe. :saint:
  • gritsch schrieb:

    die methode kennt den heutigen tag, und den geburtstag.
    es gibt ja nicht DEN Geburtstag, es sind ja alles Geburtstage die ich oben genannt habe, halt von unterschiedlichen Personen

    gritsch schrieb:

    daraus kann sie dann doch genau den autput erstellen den du gerne hättest.
    meine eigentliche Idee war ja das der FetschResultsController das für mich macht, im Sinne von hier FetchRequest das ist HEUTE sortier mir die Termine die du hast von heute an

    gritsch schrieb:

    und wenn du ihn als numerischen wert zurückgibst kann diese methode eben auch zum sortieren verwendet werden.
    wenn ich das nicht für alle Termine mache, wie kann dann die richtige SortOrder aufgebaut werden wenn nicht alle Termine einen Index haben (weil ich , wie du schreibst, nicht für alle Termine einen Index ermittelt habe)
    Ich weiß nicht immer wovon ich rede aber ich weiß das ich Recht habe. :saint:
  • Das Problem bei Geburtstagen ist, dass die ja auch das Geburtsjahr enthalten. Eine einfache Sortierung nach Monat und Tag ist somit aufwendig. In SQLite kannst du den Tag des Jahres eines Datums bestimmen, was dich der Lösung schon etwas näher bringen sollte. Allerdings gibt es da noch die Schaltjahre. Wahrscheinlich ist es am besten, die Daten zunächst auf das aktuelle Jahr und das Folgejahr abzubilden. Dabei kommen die vergangenen Daten ins Folgejahr. Wenn du diese Liste mit den berechneten Daten sortierst, bekommst du die gewünschte Reihenfolge.
    „Meine Komplikation hatte eine Komplikation.“
  • die Gechichte mit dem Selector scheint nicht immer zu funktionieren, je nach dem was man für einen persistenstore unter CoreData benutzt
    mit SQLite unten drunter kann man anscheinend keine eigenen selectoren benutzen

    ich habe das nun so gelöst das ich den NextDate zu einem Event ermittel und diesen dann in der von gritsch erwähnten Variante speichere
    also zB 20170520
    Events die dieses jahr schon waren haben halt im nextDate dann 2018MMdd und die noch nicht waren haben halt 2017MMdd
    und so kann ich dann danach auch sortieren
    aktuell noch etwas dreckig umgesetzt um zu schauen ob es funktioniert, muss ich jetzt mal aufräumen
    Ich weiß nicht immer wovon ich rede aber ich weiß das ich Recht habe. :saint: