Pregunta

Después de leer el Mapeo de objetos en Github Para Retkit, mi problema no desapareció, por lo que tal vez alguien pueda decir si Restkit podría lidiar con la siguiente idea.

Entidades con relaciones

 Company 
 - unitID 
 - companyID
 - name
 - contacts* (Company -->> Contact | 1:n)

 Contact
 - unitID
 - companyID
 - contactID
 - lastName
 - firstName
 - account* (Contact >--> Company | 1:1)

JSON (Compañía)

 [
   {
      "unitID":"003CABD8DEB5DC13C",
      "companyID":"BSP-002999",
      "name":"Testcompany"
   }
 ]

JSON (contacto)

 [
   {
      "unitID":"DAC2ACCC125795D00",
      "companyID":"BSP-002999",
      "contactID":"CLP-015468",
      "firstName":"Mister",
      "lastName":"Wayne"
   }
 ]

Debido a las limitaciones, no puedo anidar los contactos de pertenencia en las empresas (de lo contrario, no escribiría esto), por lo que quiero hacer este uso cuando los datos se asignan en la importación.

Pregunta

¿Es posible mapear cada contacto con su empresa de pertenencia (identificada por el atributo? ID de la compañía) en importación con métodos dados de Restkit?

Si no, me gustaría saber la mejor solución para ello. ¡Gracias!


Fondo

En mi primera compilación de esta aplicación, mapeé los objetos a las entidades dadas (sin relaciones) y obtuve todos los contactos de pertenencia a una empresa con el predicado CompanyId = %@. Debido a la cantidad de datos (más de 4000 compañías, más de 7000 contactos) alcanzar todos los contactos de pertenencia toma aproximadamente un segundo, por lo que se me ocurrió la idea de usar relaciones (que funciona perfectas con datos ficticios locales).


Solución

Con la ayuda de la respuesta dada debajo de mi asignación actual se parece a la siguiente (Restkit v.10).

// Setting up Restkit with objectStore
...

// Init objectMapping for Class Company
companyMapping = [RKManagedObjectMapping mappingForClass:[Company class] inManagedObjectStore:objectStore];
[companyMapping mapKeyPath:@"unitID" toAttribute:@"unitID"];
[companyMapping mapKeyPath:@"companyID" toAttribute:@"companyID"];
[companyMapping mapKeyPath:@"name" toAttribute:@"name"];
companyMapping.setDefaultValueForMissingAttributes = NO;
companyMapping.primaryKeyAttribute = @"companyID";

// Init objectMapping for Class Contact
contactMapping = [RKManagedObjectMapping mappingForClass:[Contact class] inManagedObjectStore:objectStore];
[contactMapping mapKeyPath:@"unitID" toAttribute:@"unitID"];
[contactMapping mapKeyPath:@"companyID" toAttribute:@"companyID"];
[contactMapping mapKeyPath:@"contactID" toAttribute:@"contactID"];
[contactMapping mapKeyPath:@"lastName" toAttribute:@"lastName"];
[contactMapping mapKeyPath:@"firstName" toAttribute:@"firstName"];
contactMapping.setDefaultValueForMissingAttributes = NO;
contactMapping.primaryKeyAttribute = @"contactID";

// Init relationships
[contactMapping mapRelationship:@"company" withMapping:companyMapping];
[contactMapping connectRelationship:@"company" withObjectForPrimaryKeyAttribute:@"companyID"];

// Get objects from server
...

¿Fue útil?

Solución

Sí, Restkit puede hidratar esta relación para usted en el tiempo de mapeo. En su rkmanageedObjectMapping para su modelo de contacto, deberá hacer lo siguiente:

  • Agregue una asignación de relaciones a la empresa matriz: [objectMapping mapRelationship:@"company" withMapping:companyMapping]
  • Mapee el atributo CompanyID en su modelo de contacto
  • Asegúrese de tener el PrimaryKeyAttribute configurado en ambas clases
  • Instruir a Restkit para hidratar la relación: [objectMapping connectRelationship:@"company" withObjectForPrimaryKeyAttribute:@"companyID"];

Después de que Restkit haya completado el mapeo de una carga útil, volverá a pasar por la recolección e hidratará cualquier relación. El procesamiento se difiere hasta después de mapear en caso de que la carga útil realmente cree objetos que necesita para satisfacer las conexiones.

En la rama de desarrollo, hay un flujo de trabajo alternativo disponible para usted. A principios de esta semana, agregué apoyo para hidratar una relación de gran parte utilizando una variedad de identificaciones en la carga útil. Esto le permitiría enviar la lista de contactos que pertenecen a una empresa en la carga útil. Puede ser más eficiente para su caso de uso.

Detalles adicionales de mi publicación a la lista de correo Restkit: http://groups.google.com/group/restkit/msg/416951f86b2862d1

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top