Question

Après avoir lu le Mapping-Guide de l'objet sur GitHub pour RestKit mon problème didn « t disparaissent, alors peut-être que quelqu'un peut dire si RestKit pourrait faire face à l'idée suivante.

Les entités ayant des relations

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

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

JSON (Société)

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

JSON (Contact)

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

En raison des limites que je ne suis pas en mesure de imbriquer les contacts appartenant dans les entreprises (sinon je ne serais pas écrire cela), donc je veux faire cette utilisation lorsque les données sont mis en correspondance à l'importation.

Question

Est-il possible de cartographier chaque contact pour cela appartient la société (identifiée par l'attribut COMPANYID ) à l'importation avec des méthodes données par RestKit?

Sinon, je voudrais savoir la meilleure solution pour elle. Merci!


Historique

Dans ma première version de cette application que je l'ai mis en correspondance les objets aux entités données (sans relations) et alla chercher tous les contacts appartenant à une entreprise avec le prédicat = COMPANYID% @ . En raison de la quantité de données (4000+, 7000+ entreprises les contacts) allant chercher tous les contacts appartenant prend environ une seconde. - Alors je suis venu avec l'idée de relationsships d'utilisation (qui fonctionne parfaitement avec les données de mannequin local)


Solution

Avec l'aide de la réponse donnée ci-dessous mon apparence de cartographie actuelle comme suit (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
...

Était-ce utile?

La solution

Oui, RestKit peut hydrater cette relation pour vous au moment de la cartographie. Sur votre RKManagedObjectMapping pour votre modèle de contact, vous devez faire ce qui suit:

  • Ajoutez un mappage de relation avec la société mère: [objectMapping mapRelationship:@"company" withMapping:companyMapping]
  • Carte l'attribut COMPANYID sur votre modèle Contacter
  • Assurez-vous que vous avez le primaryKeyAttribute configuré sur les deux classes
  • Instruct RestKit pour hydrater la relation: [objectMapping connectRelationship:@"company" withObjectForPrimaryKeyAttribute:@"companyID"];

Après RestKit a terminé la cartographie une charge utile, il passera à travers la collecte et hydrate les relations. Le traitement est différé jusqu'à la cartographie dans le cas où la charge utile crée en fait des objets dont vous avez besoin pour satisfaire les connexions.

Sur la branche de développement, il y a un autre flux de travail à votre disposition. Plus tôt cette semaine, j'ajouté le support pour une hydratation a-plusieurs en utilisant un tableau d'ID de la charge utile. Cela vous permet d'envoyer la liste des contacts qui appartiennent à une société dans la charge utile à la place. Il peut être plus efficace pour votre cas d'utilisation.

Des détails supplémentaires de mon poste à la liste de diffusion de RestKit: http://groups.google .com / groupe / restkit / msg / 416951f86b2862d1

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top