Tengo un modelo de Core Data con una NSDate
propiedad. Quiero filtrar la base de datos por día. Supongo que la solución implicará un NSPredicate
, pero no estoy seguro de cómo ponerlo todo junto.
Sé cómo comparar el día de dos NSDate
s usando NSDateComponents
y NSCalendar
, pero ¿cómo lo filtro con un NSPredicate
?
Quizás necesito crear una categoría en mi NSManagedObject
subclase que pueda devolver una fecha simple con solo el año, mes y día. Entonces podría comparar eso en un NSPredicate
. ¿Es esta tu recomendación o hay algo más simple?
objective-c
core-data
nsdate
nspredicate
nsfetchedresultscontroller
Jonathan Sterling
fuente
fuente
==
. Aunque si está buscando por día, recuerde que NSDate es una fecha y hora; es posible que desee utilizar un rango de medianoche a medianoche.startDate
2012-09-17 0:00:00 yendDate
2012-09-18 0:00:00 y el predicado para startDate <= date <endDate. Eso atraparía todos los tiempos el 17/09/2012.Ejemplo sobre cómo configurar startDate y endDate para la respuesta dada anteriormente:
Aquí estaba buscando todas las entradas dentro de un mes. Vale la pena mencionar que este ejemplo también muestra cómo buscar entradas de fecha 'nulas'.
fuente
En Swift obtuve algo similar a:
Me costó mucho descubrir que la interpolación de cadenas
"\(this notation)"
no funciona para comparar fechas en NSPredicate.fuente
Extensión Swift 3.0 para Fecha:
Luego use como:
fuente
Porté la respuesta de Glauco Neves a Swift 2.0 y la envolví dentro de una función que recibe una fecha y devuelve el
NSPredicate
día correspondiente:fuente
Agregando a la respuesta de Rafael (increíblemente útil, ¡gracias!), Portando para Swift 3.
fuente
Recientemente, pasé algún tiempo intentando resolver este mismo problema y agregué lo siguiente a la lista de alternativas para preparar las fechas de inicio y finalización (incluye el método actualizado para iOS 8 y superior) ...
... y
NSPredicate
para los datos básicosNSFetchRequest
(como ya se mostró anteriormente en otras respuestas) ...fuente
Para mí esto ha funcionado.
He filtrado la matriz de la fecha actual a 7 días atrás. Quiero decir que estoy obteniendo datos de una semana de la fecha actual. Esto debería funcionar.
Nota: Estoy convirtiendo la fecha que viene con milisegundos por 1000, y comparando después. Avísame si necesitas alguna claridad.
fuente
completeArray
es tener una matriz dedictionary
odataModel
quiero aplicar en DataModel.