2010-02-24 5 views
20

En mi modelo de Datos centrales tengo dos entidades: Lista y Paciente. La lista tiene un atributo llamado 'nombre'.Relación de datos múltiples de muchos a muchos - Pregunta de predicado

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 averiguar es cómo crear un predicado que seleccionará a todos los pacientes que pertenecen a un nombre de lista particular.

¿Cómo podría hacerlo? Nunca he usado relaciones antes en Core Data.

Gracias,

Respuesta

14

Esto parece funcionar bien:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(ANY lists == %@)", myList]; 

Dónde miLista es una entidad Lista real.

+0

Gracias Garry, he estado buscando esta solución por un tiempo, resulta ser fácil: P – Nick

9

Parece que su modelo de datos es la siguiente:

Lista < < - >> Paciente

Me gustaría pensar que si se conoce el nombre de la lista en particular, entonces usted sabe el objeto de lista 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 la lista con el paciente lleva el nombre "pacientes":

NSSet *patientSet = listObject.patients; 

Nota: esto requiere la creación de subclases para sus objetos administrados para que pueda acceder a los atributos y relaciones como las propiedades de los 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 a-muchos de Paciente a Lista (suponga que se llama "listas" y el nombre de la lista una cadena denominada "Nombrelista"):

NSPredicate *pred = [NSPredicate predicateWithFormat:@"ANY lists.name == %@",listName]; 
+4

En el primer ejemplo (que es correcto como de costumbre desde gerry3), puede acceder a través de KVC sin tener que subclasificar usando 'NSSet * patientSet = [listObject valueForKey: @" patients "];' –

+2

¿Pero cómo hace usted? "convertir" eso en el controlador de resultados obtenidos? También tengo la misma pregunta y sí la referencia al objeto "lista", pero me gustaría tener un controlador de resultados obtenido que muestre "lista".pacientes " – Nick

+0

En realidad, no importa, la respuesta de @Garry a continuación es lo que estaba buscando – Nick

18

Dado un modelo de datos como:

lista < < - >> paciente,

se pueden encontrar todos los casos de pacientes que pertenecen a una lista con un particu Nombre lar con una solicitud de búsqueda en la entidad paciente utilizando un predicado como:

[NSPredicate predicateWithFormat:@"ANY lists.name LIKE[cd] %@", listName] 

asumiendo listName es una instancia NSString con el nombre de la lista que desee. LIKE[cd] hace una comparación insensible a mayúsculas y no sensible a diacríticos.

+0

Tengo la entidad List en la memoria y la paso a una subclase UITableViewController. ¿Cómo puedo construir una solicitud de búsqueda para obtener todos los pacientes de esa entidad de la lista ? Estoy tratando de usar un NSFetchedResultsController y el nombre de una lista no es único (por lo que construir un predicado basado solo en el nombre podría causar errores). – Garry

Cuestiones relacionadas