2016-12-04 1 views
0

J'ai 10 enregistrements dans la base de données. Je veux aller chercher l'enregistrement où date == mydate.Récupère des objets de Coredata en utilisant NSDate

Par exemple, il y a 2 enregistrements dans la base de données, qui a pour date 502479617.512 (en millisecondes).

Je convertis à la date ci-dessus à l'aide NSDate

[NSDate dateWithTimeIntervalSinceReferenceDate:502479617.512]. 

Je reçois 2016-12-03 17:40:17 +0000

Je paramètre de date '502479617,500' qui retourne même NSDate 2016-12-03 17:40:17 +0000. Mais quand j'essaie d'aller chercher coredata, je reçois 0 objets. C'est à cause des millisecondes dans la base de données. Comment puis-je supprimer des millisecondes pour récupérer les enregistrements qui ont la même date, heure et secondes.

Répondre

0

Les propriétés NSDate seront stockées en tant qu'attributs NSDate, sauf si la case à cocher "Utiliser les propriétés scalaires pour les types de données primitifs" est cochée.

Dans ce cas, l'attribut de données de base sera stocké en tant que NSTimeInterval (double).

0

Vous pouvez le faire dans l'une de deux façons:

D'abord, vous pouvez éliminer les secondes décimales lors du stockage du NSDate. Il pourrait être automatisé en remplaçant didSet pour la propriété. Vous pouvez aussi le faire partout où vous faites la conversion que vous décrivez.

Vous pouvez également spécifier un intervalle d'une seconde lors de l'extraction. Votre demande de récupération alors besoin d'un prédicat de ce genre:

NSPredicate(format: "date >= %@ && date < %@", aDate, aDate.addingTimeInterval(60)) 

Objective-C

[NSPredicate predicateWithFormat:@"date >= %@ && date < %@", 
    aDate, [aDate dateByAddingTimeInterval:60]]; 
0

Il suffit d'enregistrer comme NSString. Puis convertissez en double lorsque vous en avez besoin.