iphone - www - Datos básicos relación muchos a muchos-Pregunta de predicados
tumblr settings (3)
En mi modelo de Datos Básicos, tengo dos entidades: Lista y Paciente. La lista tiene un atributo llamado ''nombre''.
Una lista puede tener cualquier cantidad de pacientes y cada paciente puede pertenecer a cualquier cantidad de listas diferentes. Por lo tanto, he establecido una relación en List llamada ''pacientes'' que tiene una relación inversa a-muchos con el paciente Y una relación en el paciente llamada ''listas'' que tiene una relación de muchos a la lista.
Lo que me cuesta entender es cómo crear un Predicado que seleccionará a todos los Pacientes que pertenecen a un Nombre de Lista particular.
¿Cómo voy a hacer esto? Nunca he usado relaciones antes en Core Data.
Gracias,
Dado un modelo de datos como:
Lista << - >> Paciente,
puede encontrar todas las instancias de pacientes que pertenecen a una lista con un nombre particular con una solicitud de búsqueda en la entidad Patient usando un predicado como:
[NSPredicate predicateWithFormat:@"ANY lists.name LIKE[cd] %@", listName]
asumiendo que listName
es una instancia de NSString
con el nombre de lista que desea. LIKE[cd]
hace una comparación insensible a mayúsculas y diacrítica-insensible.
Esto parece funcionar bien:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lists == %@)", myList];
Donde myList es una entidad de lista real.
Parece que su modelo de datos es este:
Lista << - >> Paciente
Creo que si conoces el nombre de la lista en particular, entonces conoces el objeto de la lista en particular. Si es así, puede agarrar a los pacientes usando la relación de muchos a todos, desde la lista al paciente: es un conjunto de objetos para el paciente. Por ejemplo, si la relación de List to Patient se llama "pacientes":
NSSet *patientSet = listObject.patients;
Nota: esto requiere que cree subclases para sus objetos administrados para que pueda acceder a los atributos y relaciones como propiedades en sus objetos.
Si solo conoce el nombre de la lista por algún motivo, y está buscando objetos del paciente, puede crear un predicado utilizando la relación múltiple del paciente a la lista (suponiendo que se llame "listas" y el nombre de la lista en una cadena llamada " Lista de nombres"):
NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY lists.name == %@",listName];