Ich habe ein Core Data-Modell mit einer NSDate
Eigenschaft. Ich möchte die Datenbank nach Tag filtern. Ich NSPredicate
gehe davon aus, dass die Lösung eine beinhaltet , bin mir aber nicht sicher, wie ich alles zusammensetzen soll.
Ich weiß, wie man den Tag von zwei NSDate
Sekunden mit NSDateComponents
und vergleicht NSCalendar
, aber wie filtere ich ihn mit einem NSPredicate
?
Vielleicht muss ich in meiner NSManagedObject
Unterklasse eine Kategorie erstellen , die ein nacktes Datum mit nur Jahr, Monat und Tag zurückgeben kann. Dann könnte ich das in einem vergleichen NSPredicate
. Ist das Ihre Empfehlung oder gibt es etwas Einfacheres?
objective-c
core-data
nsdate
nspredicate
nsfetchedresultscontroller
Jonathan Sterling
quelle
quelle
==
. Wenn Sie jedoch tagsüber suchen, denken Sie daran, dass NSDate ein Datum und eine Uhrzeit ist. Möglicherweise möchten Sie einen Bereich von Mitternacht bis Mitternacht verwenden.startDate
2012-09-17 0:00:00 undendDate
2012-09-18 0:00:00 sowie das Prädikat startDate <= date <endDate festlegen. Das würde am 17.09.2012 alle Zeiten fangen.Beispiel zum Einrichten von startDate und endDate für die oben angegebene Antwort:
Hier habe ich innerhalb eines Monats nach allen Einträgen gesucht. Es ist erwähnenswert, dass dieses Beispiel auch zeigt, wie man 'nil' Datumsangaben sucht.
quelle
In Swift habe ich etwas Ähnliches bekommen wie:
Es fiel mir schwer
"\(this notation)"
herauszufinden , dass die Zeichenfolgeninterpolation beim Vergleichen von Daten in NSPredicate nicht funktioniert.quelle
Swift 3.0-Erweiterung für Datum:
Dann benutze wie:
quelle
Ich habe die Antwort von Glauco Neves auf Swift 2.0 portiert und sie in eine Funktion eingeschlossen, die ein Datum erhält und das
NSPredicate
für den entsprechenden Tag zurückgibt :quelle
Hinzufügen zu Rafaels Antwort (unglaublich nützlich, danke!), Portierung für Swift 3.
quelle
Ich habe kürzlich einige Zeit damit verbracht, das gleiche Problem zu lösen und der Liste der Alternativen zur Vorbereitung von Start- und Enddaten Folgendes hinzuzufügen (einschließlich aktualisierter Methode für iOS 8 und höher) ...
... und die
NSPredicate
für die KerndatenNSFetchRequest
(wie oben bereits in anderen Antworten gezeigt) ...quelle
Bei mir funktioniert das.
Ich habe das Array vom aktuellen Datum bis vor 7 Tagen gefiltert. Ich meine, ich erhalte eine Woche Daten vom aktuellen Datum. Das sollte funktionieren.
Hinweis: Ich konvertiere das Datum, das mit Millisekunden von 1000 kommt, und vergleiche danach. Lassen Sie mich wissen, wenn Sie Klarheit brauchen.
quelle
completeArray
ist es Array vondictionary
oderdataModel
ich möchte auf DataModel anwenden.