Tengo un modelo de Core Data con una NSDatepropiedad. 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 NSDates usando NSDateComponentsy NSCalendar, pero ¿cómo lo filtro con un NSPredicate?
Quizás necesito crear una categoría en mi NSManagedObjectsubclase 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.startDate2012-09-17 0:00:00 yendDate2012-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
NSPredicatedí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
NSPredicatepara 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
completeArrayes tener una matriz dedictionaryodataModelquiero aplicar en DataModel.