NSPredicate: filtrage des objets par jour de NSDate propriété
J'ai un Core modèle de Données avec un NSDate
de la propriété. Je veux filtrer la base de données par jour. Je suppose que la solution implique une NSPredicate
, mais je ne suis pas sûr de la façon de mettre tout cela ensemble.
Je sais comment comparer le jour de deux NSDate
s à l'aide de NSDateComponents
et NSCalendar
, mais comment puis-je filtre avec un NSPredicate
?
Peut-être que j'ai besoin de créer une catégorie sur mon NSManagedObject
sous-classe qui peut retourner un nu-date avec l'année, le mois et le jour. Ensuite, j'ai pu la comparer à une NSPredicate
. Est-ce que votre recommandation, ou est-il quelque chose de plus simple?
Vous devez vous connecter pour publier un commentaire.
Donné un NSDate * date de début et date de fin et un NSManagedObjectContext * moc:
==
. Si vous êtes à la recherche par jour, rappelez-vous que NSDate est une date-et-heure -- vous pouvez utiliser un ensemble de minuit à minuit gamme.startDate
à 2012-09-17 0:00:00 etendDate
à 2012-09-18 0:00:00 et le prédicat startDate <= date < date_fin. Qui permettraient de capter tous les temps sur 2012-09-17.Date
), j'ai donc dû utiliseras NSDate
au silence une erreur du compilateur.Exemple sur la façon de configurer également startDate et endDate à la réponse donnée:
Ici, j'ai été à la recherche pour toutes les entrées dans un délai d'un mois. Il vaut la peine de mentionner que cet exemple montre également comment la recherche " nil " date-entrées.
Dans Swift j'ai eu quelque chose de similaire à:
J'ai eu un moment difficile de découvrir cette chaîne d'interpolation
"\(this notation)"
ne fonctionne pas pour la comparaison des dates dans NSPredicate.J'ai porté à la réponse de Glauco Neves Swift 2.0 et enveloppé à l'intérieur d'une fonction qui reçoit une date et renvoie la
NSPredicate
pour le jour correspondant:Swift 3.0 extension pour Date:
Puis à utiliser comme:
L'ajout de Rafael réponse (incroyablement utile, merci!), le portage pour Swift 3.
J'ai récemment passé un certain temps à tenter de résoudre ce même problème et ajoutez les lignes suivantes à la liste des solutions de rechange pour préparer de début et dates de fin (inclut la méthode de mise à jour pour iOS 8 et ci-dessus)...
...et la
NSPredicate
pour la Base de DonnéesNSFetchRequest
(comme déjà indiqué ci-dessus dans les autres réponses)...Pour moi, c'est travaillé.
J'ai filtré tableau à partir de la date actuelle dans les 7 jours de retour. Je veux dire que je suis à l'obtention d'une semaine de données à partir de la date actuelle. Cela devrait fonctionner.
Note: je suis la conversion de la date qui est à venir avec milli secondes par 1000, et de les comparer après. Laissez-moi savoir si vous avez besoin de plus de clarté.
completeArray
est-il d'avoir de Tableau dedictionary
oudataModel
je veux appliquer sur DataModel.