Tengo un modelo de datos básicos en el que una entidad de tarea incluye una relación opcional de muchos días excluidos de la entidad ExcludedDay. Una de las propiedades de ExcludedDay es day, que es un objeto NSDate. La entidad ExcludedDay tiene una relación inversa obligatoria one-to con la entidad Task.¿Cómo configurar correctamente una NSPredicate para una relación de muchos cuando se utilizan datos principales?
Para buscar las tareas para un día específico, necesito asegurarme de que el día especificado no aparezca como la propiedad day de cualquier entidad ExludedDay.
empecé a tratar
NSPredicate *dayIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"ALL excludedDays.day != %@", today];
Sin embargo, a pesar de lo que dice la documentación, TODO no funciona y la aplicación inicia una excepción: Terminación de aplicación debido a excepción no detectada ‘NSInvalidArgumentException’, razón: ‘predicado no compatible.
Después de publicar la misma pregunta en este foro, yo era capaz de idear el siguiente predicado con la ayuda de varias personas:
NSPredicate * dayIsNotExcludedPredicate = [NSPredicate predicateWithFormat: @"[email protected] == 0 || ([email protected] > 0 && NONE excludedDays.day == %@))", today];
Si bien esto funcionó al principio, Acabo de descubrir que esto sólo funciona cuando la entidad ExcludedDay contiene SOLAMENTE un día. Tan pronto como la entidad ExcludedDay contiene más de un día para la misma tarea, este predicado deja de funcionar. Como resultado, se selecciona una tarea para un día, aunque el día aparezca como un día en la entidad ExcludedDay, lo cual es, por supuesto, incorrecto. El problema no está relacionado con el día de la propiedad como un objeto NSDate: reemplazando el día con el NSString correspondiente o de forma equivalente con un entero, todavía tengo el mismo problema y un comportamiento incorrecto.
¿Cuál es la forma correcta de implementar el predicado en este caso? ¿Puede tratarse de un error relacionado con el operador agregado ANY cuando se usan datos centrales? Gracias de antemano, esto ahora me está volviendo loco.
¿Quizás sepa cómo escribir la expresión con SUBQUERY con las clases NSExpresion y NSComparisonPredicate? Con su respuesta, decidí que la mi pregunta: http://stackoverflow.com/questions/2006927/whats-better-way-to-build-nspredicate-with-to-many-deep-relationships Gracias – Victor
Muchas gracias por esta respuesta, realmente útil. – Maria