2010-02-09 11 views
6

Tengo un modelo de CoreData con 4 entidades.Core-Data: Predicado para relaciones de muchos a

Modelo de pantalla ->http://img96.imageshack.us/img96/7857/screenshot20100209at182.png

Estado

-StateName

Ubicación:

-locationName (attribute)

-locationDescription

-locationActivities (relatinship)

-state (relationship)

LocationActivities:

-location (relationship)

-activity (relationship)

Actividades

-activityName(attribute)

-locationsActivities (relationship)

¿Cómo puedo escribir una consulta que selecciona todas las ubicaciones que tienen

(activity = 'Golf' OR activity = 'Swimming') AND state = 'LA'

Respuesta

5
// With some NSManagedObjectContext *moc 
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease]; 
[request setEntity:[NSEntityDescription entityForName:@"Location" 
           inManagedObjectContext:moc]]; 
[request setPredicate:[NSPredicate predicateWithFormat: 
         @"(locationActivities.activity.activityName == %@ OR 
          locationActivities.activity.activityName == %@) AND 
         state.stateName == %@", 
         @"Golf", @"Swimming", @"LA"]]; 
NSError *error; 
NSArray *results = [moc executeFetchRequest:request error:&error];

Básicamente, hacer un Core Data Explorar como normal, entonces construir el predicado apropiado para filtrar los resultados (como se describe en Predicate Programming Guide).

+0

¿qué pasa con la tabla de vinculación de LocationActivities? –

+0

Solucionado, pero ¿por qué está esa entidad allí en primer lugar? Usted puede (creo) simplemente tener una relación de uno a varios de Ubicación a Actividad. – Tim

+0

esto no funciona. me sale el error: 'to-many key no permitido aquí'. He agregado otra entidad según lo sugerido por http://stackoverflow.com/questions/1903177/coredata-many-to- many-relationships-and-nspredicate –

-1

Como un aparte, debe dejar de pensar en términos de tablas y consultas para Core Data. En Core Data esos detalles específicos de la tienda persistente sqllite y nunca los ve ni los trata.

Las entidades no son tablas y las relaciones no son tablas de enlaces. Intentar meter el modelo de objetos en un SQL en tu cabeza te llevará a la pena porque Core Data no funciona como SQL.

1

Acabo de notar que en su captura de pantalla, su entidad LocationActivities en realidad está deletreada LocationAtivities (fíjese en la "c" faltante).

Eso es suficiente para arruinar su gráfico. Cualquier predicado que busque LocationActivities fallará.

Errores como este me hacen odiar la programación. Parece que paso más tiempo rastreando errores tipográficos que solucionando errores de diseño.

Cuestiones relacionadas