I'm trying to make a fetch for dates later than a specific date. My predicate is as follows:
NSPredicate(format: "date > \(currentDate)") When I executed the fetch request I caught an exception:
'Unable to parse the format string "date > 2015-07-08 03:00:00 +0000"' I thought I could make a query like that. What am I doing wrong?
In swift 3 the predicate changed to:
let datePredicate = NSPredicate(format: "date > %@", currentDate as NSDate)
With Swift 3, according to your needs, you may choose one of 5 the following patterns in order to solve your problem.
NSPredicate init(format:arguments:) initializer with NSDate instanceNSPredicate has an initializer called init(format:arguments:) that has the following declaration:
init(format predicateFormat: String, arguments argList: CVaListPointer) Creates and returns a new predicate by substituting the values in an argument list into a format string and parsing the result.
When used with NSDate, you can set an instance of NSPredicate by using init(format:arguments:) as indicated below:
let date = NSDate() let predicate = NSPredicate(format: "date > %@", date) NSPredicate init(format:argumentArray:) initializer with NSDate instanceNSPredicate has an initializer called init(format:argumentArray:) that has the following declaration:
init(format predicateFormat: String, argumentArray arguments: [Any]?) Creates and returns a new predicate by substituting the values in a given array into a format string and parsing the result.
When used with NSDate, you can set an instance of NSPredicate by using init(format:argumentArray:) as indicated below:
let date = NSDate() let predicate = NSPredicate(format: "date > %@", argumentArray: [date]) NSPredicate init(format:arguments:) initializer with Date instance casted to NSDate When used with Date, you can set an instance of NSPredicate by casting your Date instance to NSDate as indicated below:
let date = Date() let predicate = NSPredicate(format: "date > %@", date as NSDate) NSPredicate init(format:arguments:) initializer with Date instance casted to CVarArg When used with Date, you can set an instance of NSPredicate by casting your Date instance to CVarArg as indicated below:
let date = Date() let predicate = NSPredicate(format: "date > %@", date as CVarArg) NSPredicate init(format:argumentArray:) initializer with Date instanceWhen used with Date, you can set an instance of NSPredicate by using init(format:argumentArray:) as indicated below:
let date = Date() let predicate = NSPredicate(format: "date > %@", argumentArray: [date])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With