• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

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.
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
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?
 

Applecar

Idared
Registriert
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.
 

Amin Negm-Awad

Süsser Pfaffenapfel
Registriert
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];
 

Applecar

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