• Das kreative Thema des Monats Oktober wird vor allem diejenigen unter Euch besonders ansprechen, denen Do-it-yourself quasi im Blut liegt. Zeigt uns Eure Improvisationskünste oder fotografiert, was andere Leute sich so im Alltag zusammengestrickt haben. --> Zum Mitmachen bitte hier klicken

Wie kann ich diesen Array-Filter formulieren?

Applecar

Idared
Registriert
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.
 
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?
 
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.
 
-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];
 
Ich hatte noch nicht Zeit es auszuprobieren, aber vielen Dank für die Hilfe erstmal. :-)