Frage

Nach dem Lesen der Objektzuordnung auf GitHub Für Restkit verschwand mein Problem nicht, also kann vielleicht jemand sagen, wenn Restkit mit der folgenden Idee umgehen könnte.

Entitäten mit Beziehungen

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

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

JSON (Firma)

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

JSON (Kontakt)

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

Aufgrund von Einschränkungen kann ich die Zugehörigkeitskontakte nicht in die Unternehmen einschränken (sonst würde ich das nicht schreiben), also möchte ich diese Verwendung tun, wenn die Daten beim Import zugeordnet sind.

Frage

Ist es möglich, jeden Kontakt an seine Zugehörigkeitsfirma abzubilden (identifiziert durch das Attribut FirmaID) beim Import mit gegebenen Methoden durch Restkit?

Wenn nicht, würde ich gerne die beste Lösung dafür kennen. Vielen Dank!


Hintergrund

In meinem ersten Aufbau dieser App habe ich die Objekte den gegeben companyId = %@. Aufgrund der Datenmenge (über 4000 Unternehmen, mehr als 7000 Kontakte), die alle Zugehörigkeitskontakte abrufen, dauert ungefähr eine Sekunde - daher habe ich die Idee gefunden, Beziehungen zu verwenden (die perfekt mit lokalen Dummy -Daten funktioniert).


Lösung

Mit Hilfe der angegebenen Antwort unten sieht meine aktuelle Zuordnung wie die folgende (Restkit v.10) aus.

// 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
...

War es hilfreich?

Lösung

Ja, Restkit kann diese Beziehung für Sie zur Zuordnung der Zeit hydratisieren. Auf Ihrem RKManagedObjectMapping für Ihr Kontaktmodell müssen Sie Folgendes tun:

  • Fügen Sie der Muttergesellschaft eine Beziehungskartierung hinzu: [objectMapping mapRelationship:@"company" withMapping:companyMapping]
  • Zeichnen Sie das Unternehmensattribut auf Ihr Kontaktmodell ab
  • Stellen Sie sicher, dass Sie über die PrimaryKeyAttribute in beiden Klassen konfiguriert sind
  • Weisen Sie Restkit an, die Beziehung zu hydratieren: [objectMapping connectRelationship:@"company" withObjectForPrimaryKeyAttribute:@"companyID"];

Nachdem Restkit die Zuordnung einer Nutzlast abgeschlossen hat, wird sie durch die Sammlung zurückgegeben und alle Beziehungen hydratisiert. Die Verarbeitung wird bis nach der Zuordnung aufgeschoben, falls die Nutzlast tatsächlich Objekte erstellt, die Sie zur Erfüllung der Verbindungen benötigen.

In der Entwicklungszweig gibt es Ihnen einen alternativen Workflow. Anfang dieser Woche habe ich Unterstützung für die Feuchtigkeit eines Has-viele-Beziehung mit einer Auswahl von IDs in der Nutzlast hinzugefügt. Auf diese Weise können Sie die Liste der Kontakte senden, die zu einer Firma in der Nutzlast gehören. Für Ihren Anwendungsfall kann es effizienter sein.

Zusätzliche Details aus meinem Beitrag zur Restkit -Mailingliste: http://groups.google.com/group/restkit/msg/416951f86b2862d1

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top