J'ai un modèle Core Data avec une NSDate
propriété. Je souhaite filtrer la base de données par jour. Je suppose que la solution impliquera un NSPredicate
, mais je ne sais pas comment mettre tout cela ensemble.
Je sais comment comparer le jour de deux NSDate
s en utilisant NSDateComponents
et NSCalendar
, mais comment puis-je le filtrer avec un NSPredicate
?
Peut-être que j'ai besoin de créer une catégorie sur ma NSManagedObject
sous-classe qui peut renvoyer une date nue avec juste l'année, le mois et le jour. Ensuite, je pourrais comparer cela dans un fichier NSPredicate
. Est-ce votre recommandation ou y a-t-il quelque chose de plus simple?
objective-c
core-data
nsdate
nspredicate
nsfetchedresultscontroller
Jonathan Sterling
la source
la source
==
. Cependant, si vous effectuez une recherche par jour, n'oubliez pas que NSDate est une date et une heure - vous voudrez peut-être utiliser une plage de minuit à minuit.startDate
sur 2012-09-17 0:00:00 etendDate
2012-09-18 0:00:00 et le prédicat sur startDate <= date <endDate. Cela attraperait tous les temps le 2012-09-17.Exemple sur la façon de configurer également startDate et endDate à la réponse donnée ci-dessus:
Ici, je recherchais toutes les entrées dans un délai d'un mois. Il convient de mentionner que cet exemple montre également comment rechercher des entiers de date «nil».
la source
Dans Swift, j'ai quelque chose de similaire à:
J'ai eu du mal à découvrir que l'interpolation de chaînes
"\(this notation)"
ne fonctionne pas pour comparer des dates dans NSPredicate.la source
Extension Swift 3.0 pour Date:
Ensuite, utilisez comme:
la source
J'ai porté la réponse de Glauco Neves vers Swift 2.0 et l' ai enveloppée dans une fonction qui reçoit une date et renvoie le
NSPredicate
pour le jour correspondant:la source
Ajout à la réponse de Rafael (incroyablement utile, merci!), Portage pour Swift 3.
la source
J'ai récemment passé du temps à essayer de résoudre ce même problème et d'ajouter ce qui suit à la liste des alternatives pour préparer les dates de début et de fin (comprend la méthode mise à jour pour iOS 8 et plus) ...
... et
NSPredicate
pour les données de baseNSFetchRequest
(comme déjà indiqué ci-dessus dans d'autres réponses) ...la source
Pour moi, cela fonctionne.
J'ai filtré le tableau de la date actuelle à 7 jours en arrière. Je veux dire que je reçois des données d'une semaine à partir de la date actuelle. Cela devrait fonctionner.
Remarque: je convertis la date qui vient avec des milli secondes par 1000, et je compare après. Faites-moi savoir si vous avez besoin de clarté.
la source
completeArray
il a Array dedictionary
oudataModel
je souhaite postuler sur DataModel.