profesional mega how experto curso con completo cero ios swift core-data nspredicate

ios - mega - No se puede consultar la fecha usando NSPredicate en Swift



ios 11 y swift 4:curso completo de cero a profesional mega (3)

Con Swift 3, de acuerdo con sus necesidades, puede elegir uno de los siguientes 5 patrones para resolver su problema.

# 1. Uso del init(format:​arguments:​) NSPredicate init(format:​arguments:​) NSDate con la instancia de NSDate

NSPredicate tiene un inicializador llamado init(format:​arguments:​) NSPredicate que tiene la siguiente declaración:

init(format predicateFormat: String, arguments argList: CVaListPointer)

Crea y devuelve un nuevo predicado sustituyendo los valores de una lista de argumentos en una cadena de formato y analizando el resultado.

Cuando se usa con NSDate , puede establecer una instancia de NSPredicate usando init(format:​arguments:​) NSPredicate como se indica a continuación:

let date = NSDate() let predicate = NSPredicate(format: "date > %@", date)

# 2. Usando NSPredicate init(format:argumentArray:) initializer con la instancia de NSDate

NSPredicate tiene un inicializador llamado init(format:argumentArray:) que tiene la siguiente declaración:

init(format predicateFormat: String, argumentArray arguments: [Any]?)

Crea y devuelve un nuevo predicado sustituyendo los valores de una matriz dada en una cadena de formato y analizando el resultado.

Cuando se usa con NSDate , puede establecer una instancia de NSPredicate usando init(format:​argumentArray:​) NSPredicate como se indica a continuación:

let date = NSDate() let predicate = NSPredicate(format: "date > %@", argumentArray: [date])

# 3. Uso del init(format:argumentArray:) NSPredicate init(format:argumentArray:) NSDate con la instancia de Date NSDate en NSDate

Cuando se utiliza con Date , puede establecer una instancia de NSPredicate su instancia de Date en NSDate como se indica a continuación:

let date = Date() let predicate = NSPredicate(format: "date > %@", date as NSDate)

# 4. Uso del init(format:argumentArray:) NSPredicate init(format:argumentArray:) CVarArg con la instancia de Date CVarArg en CVarArg

Cuando se utiliza con Date , puede establecer una instancia de NSPredicate su instancia de Date en CVarArg como se indica a continuación:

let date = Date() let predicate = NSPredicate(format: "date > %@", date as CVarArg)

# 5. Usando NSPredicate init(format:argumentArray:) initializer con la instancia de Date

Cuando se usa con Date , puede establecer una instancia de NSPredicate usando init(format:argumentArray:) como se indica a continuación:

let date = Date() let predicate = NSPredicate(format: "date > %@", argumentArray: [date])

Estoy tratando de hacer una búsqueda para las fechas posteriores a una fecha específica. Mi predicado es el siguiente:

NSPredicate(format: "date > /(currentDate)")

Cuando ejecuté la solicitud de recuperación, detecté una excepción:

''Unable to parse the format string "date > 2015-07-08 03:00:00 +0000"''

Pensé que podría hacer una consulta como esa. ¿Qué estoy haciendo mal?


En swift 3 el predicado cambió a:

let datePredicate = NSPredicate(format: "date > %@", currentDate as NSDate)


NSPredicate(format:_:) toma una cadena de formato y una lista de argumentos, pero estás pasando una cadena simple. Esto no funciona, ya que este inicializador no solo llama a stringWithFormat: en los parámetros, sino que en realidad mira la información de tipo de los argumentos mientras construye el predicado.

Puedes usar ese inicializador pasando la fecha como un argumento:

let datePredicate = NSPredicate(format: "date > %@", currentDate)