2012-05-17 15 views
6

Tengo una clase Person (atributos de firstName y lastName) y otra entidad Worker (atributos de salario y título). En mi modelo de Datos básicos, la entidad Persona se configura como el padre de la entidad Trabajador. En mi configuración AppDelegate que mi asignación ...Asignación de entidad de RestKit y Asignación de entidad principal

RKManagedObjectMapping* personMapping = [RKManagedObjectMapping mappingForEntityWithName:@"Person" inManagedObjectStore:objectManager.objectStore]; 
[personMapping mapKeyPath:@"firstName" toAttribute:@"firstName"]; 
[personMapping mapKeyPath:@"lastName" toAttribute:@"lastName"];  
[objectManager.mappingProvider addObjectMapping:personMapping]; 

RKManagedObjectMapping* workerMapping = [RKManagedObjectMapping mappingForEntityWithName:@"Worker" inManagedObjectStore:objectManager.objectStore]; 
[workerMapping mapKeyPath:@"wage" toAttribute:@"wage"]; 
[workerMapping mapKeyPath:@"title" toAttribute:@"title"]; 
[objectManager.mappingProvider setMapping:workerMapping forKeyPath:@"workers"];  

RKManagedObjectSeeder* seeder = [RKManagedObjectSeeder objectSeederWithObjectManager:objectManager]; 
[seeder seedObjectsFromFiles:@"people.json", nil]; 

... en people.json ...

{ 
    "workers": 
    [ 
     { 
      "firstName":"Rob", 
      "lastName":"Johnson" 
     }, 
     { 
      "firstName":"John", 
      "lastName":"Roberts" 
     } 
    ] 
} 

... ahora cuando ejecuta este no haya objetos son cabeza de serie. ¿Cómo expreso el hecho de que la clase Trabajadora tiene los mismos mapeos que Person? Podría simplemente agregarlos a ese mapeo, pero eso parece estar mal.

también al registrar las asignaciones persona que utiliza ...

[objectManager.mappingProvider addObjectMapping:personMapping]; 

... Yo no uso el método RKManagedObjectMapping setMapping: forKeyPath: porque nunca vamos a experimentar sólo una persona en esta solicitud y por lo nunca lo estaremos mapeando. Pero aún quiero que se registre. para las entidades secundarias de la persona.

+0

¿Puedes probar esto: [[RKObjectManager sharedManager] .mappingProvider setObjectMapping: personMapping forKeyPath: @ "workers"]? Soy nuevo en el kit de reparación, pero por lo que yo entiendo, debe incluir de alguna manera a los "trabajadores" en su keypath y pensar que esto hará esto. ¿Por qué se llama trabajo pero no devuelve salario y título? – Pfitz

+0

¡Gracias, lo intentaré! Para su pregunta, estaba lanzando esto rápidamente y aún no había agregado esos valores. – rob5408

+0

quizás también pueda experimentar esto: [personMapping mapKeyPath: @ "workers.firstName" toAttribute: @ "firstName"]; – Pfitz

Respuesta

0

No le está diciendo al asignador de objetos que haga algo con los campos firstName y lastName. Solo ha definido asignaciones para wage y title. Para que su siembra funcione, es necesario definir las asignaciones de la estructura de la JSON, así como su servicio de web y añadir algo como:

[workerMapping mapKeyPath:@"workers.firstName" toAttribute:@"firstName"]; 
[workerMapping mapKeyPath:@"workers.lastName" toAttribute:@"lastName"]; 

Entonces, al ejecutar la siembra, el asignador trabajador sabrá cómo asignar esos valores desde su people.json a sus nuevos objetos Worker.

Cuestiones relacionadas