J'essaie de chercher des dates plus tard qu'une date spécifique. Mon prédicat est le suivant:
NSPredicate(format: "date > \(currentDate)")
Lorsque j'ai exécuté la demande de récupération, j'ai détecté une exception:
'Unable to parse the format string "date > 2015-07-08 03:00:00 +0000"'
Je pensais pouvoir faire une requête comme ça. Qu'est-ce que je fais mal?
NSPredicate(format:_:)
prend une chaîne de format et une liste d'arguments, mais vous passez une chaîne simple. Cela ne fonctionne pas, car cet initialiseur n'appelle pas simplement stringWithFormat:
sur les paramètres, mais examine en fait les informations de type des arguments lors de la construction du prédicat.
Vous pouvez utiliser cet initialiseur en passant la date comme argument:
let datePredicate = NSPredicate(format: "date > %@", currentDate)
En Swift 3 le prédicat a changé en:
let datePredicate = NSPredicate(format: "date > %@", currentDate as NSDate)
Avec Swift 3, selon vos besoins, vous pouvez choisir l'un des 5 modèles suivants afin de résoudre votre problème.
NSPredicate
init(format:arguments:)
initialiseur avec l'instance NSDate
NSPredicate
a un initialiseur appelé init(format:arguments:)
qui a la déclaration suivante:
init(format predicateFormat: String, arguments argList: CVaListPointer)
Crée et renvoie un nouveau prédicat en substituant les valeurs d'une liste d'arguments dans une chaîne de format et en analysant le résultat.
Lorsqu'il est utilisé avec NSDate
, vous pouvez définir une instance de NSPredicate
en utilisant init(format:arguments:)
comme indiqué ci-dessous:
let date = NSDate()
let predicate = NSPredicate(format: "date > %@", date)
NSPredicate
init(format:argumentArray:)
initialiseur avec l'instance NSDate
NSPredicate
a un initialiseur appelé init(format:argumentArray:)
qui a la déclaration suivante:
init(format predicateFormat: String, argumentArray arguments: [Any]?)
Crée et retourne un nouveau prédicat en substituant les valeurs d'un tableau donné dans une chaîne de format et en analysant le résultat.
Lorsqu'il est utilisé avec NSDate
, vous pouvez définir une instance de NSPredicate
en utilisant init(format:argumentArray:)
comme indiqué ci-dessous:
let date = NSDate()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
NSPredicate
init(format:arguments:)
initialiseur avec Date
instance castée en NSDate
Lorsqu'il est utilisé avec Date
, vous pouvez définir une instance de NSPredicate
en transtypant votre Date
instance en NSDate
comme indiqué ci-dessous:
let date = Date()
let predicate = NSPredicate(format: "date > %@", date as NSDate)
NSPredicate
init(format:arguments:)
initialiseur avec Date
instance castée en CVarArg
Lorsqu'il est utilisé avec Date
, vous pouvez définir une instance de NSPredicate
en transtypant votre Date
instance en CVarArg
comme indiqué ci-dessous:
let date = Date()
let predicate = NSPredicate(format: "date > %@", date as CVarArg)
NSPredicate
init(format:argumentArray:)
initialiseur avec l'instance Date
Lorsqu'il est utilisé avec Date
, vous pouvez définir une instance de NSPredicate
en utilisant init(format:argumentArray:)
comme indiqué ci-dessous:
let date = Date()
let predicate = NSPredicate(format: "date > %@", argumentArray: [date])