1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

Wie kann ich diesen Array-Filter formulieren?

Dieses Thema im Forum "OS X-Developer" wurde erstellt von Applecar, 24.01.09.

  1. Applecar

    Applecar Idared

    Dabei seit:
    24.01.09
    Beiträge:
    24
    Hallo,

    ich habe ein Array von Aufgaben-Objecten, jedes Aufgebenobject besteht aus einem Datum und dem Aufgabenstring. Es kann mehrere Aufgaben pro Tag geben.

    Wie filtere ich das Array so, dass ich alle Aufgaben für die nächsten drei Tage, für die es Aufgaben gibt, bekomme? (Es kann auch Tage ohne Aufgaben geben).

    Ich dachte, am besten verwende ich filterUsingPredicate:, aber ich weiss nicht, wie ich meine oben beschriebene Suche formulieren kann.

    (Das ist mein erstes Programm in Cocoa und mein erster Programmierversuch überhaupt, also entschuldigt, wenn die Frage irgendwie bloede ist...)

    LG, Applecar.
     
  2. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    Das ist nicht einfach, weil Prädikate keine Joins sind. Du kannst auch nicht Aggregate verknüpfen. In deinem Falle müsste es aber noch mit dem BETWEEN-Operator gehen. Probiert?
     
  3. Applecar

    Applecar Idared

    Dabei seit:
    24.01.09
    Beiträge:
    24
    Danke erstmal.

    Angenommen heute ist der 25/01/2009, ich habe eine Aufgabe am 25/01/2009, 3 Aufgaben am 27/01/2009 und 2 Aufgaben am 01/02/2009, dann kann ich mit BETWEEN alle Aufgaben zwischen dem 25/01/2009 und dem 01/02/2009 bekommen, oder? Aber dazu muss ich erstmal wissen, dass die nächsten drei Tage ab dem 25/01/2009 für die es Aufgaben gibt der 25.1., der 27.1. und der 1.2. sind, oder? Das müsste ich dann vorher irgendwie ermitteln?

    LG, Applecar.
     
  4. Amin Negm-Awad

    Amin Negm-Awad Süsser Pfaffenapfel

    Dabei seit:
    01.03.07
    Beiträge:
    665
    -date (NSDate) liefert dir ja das aktuelle Datum (und die Uhrzeit). Mit etwas Datumsarithmetik kennst du dann den Anfang und das Ende des Zeitraums. Also hast du jetzt zwei Date-Instanzen die die Grenzen bestimmen.

    Jetzt machst du ein Prädikat, wobei du die Parameter für BETWEEN offenlässt und die zur Laufzeit mittels %@ einsetzt.

    Hast du also ein Array der Aufgaben, so hast du so etwas wie (hier getippt, ohne jede Gewähr)
    Code:
    NSDate* intervalBegin = …;
    NSDate* intervalEnd = …;
    NSPredicate* tasksPredicate = [NSPredicate predicateWithFormat:"time BETWEEN { %@, %@ }", intervalBegin, intervalEnd];
     
  5. Applecar

    Applecar Idared

    Dabei seit:
    24.01.09
    Beiträge:
    24
    Ich hatte noch nicht Zeit es auszuprobieren, aber vielen Dank für die Hilfe erstmal. :)
     

Diese Seite empfehlen