Взаимосвязи сопоставления объектов RestKit без KVC

После прочтения руководства по сопоставлению объектов на GitHub для RestKit моя проблема не исчезла, так что, возможно, кто-нибудь может сказать, сможет ли RestKit справиться со следующей идеей.

Сущности со связями

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

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

JSON (Компания)

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

JSON (Контакт)

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

Из-за ограничений я не могу вложить соответствующие контакты в компании (иначе я бы не стал писать это), поэтому Я хочу использовать это, когда данные отображаются при импорте.

Вопрос

Можно ли сопоставить каждый Контакт с принадлежащей ему Компанией (идентифицируемой атрибутом companyID ) при импорте с заданными методами с помощью RestKit?

Если нет, я хотел бы знать лучшее решение для этого. Спасибо!


Предпосылки

В моей первой сборке этого приложения я сопоставил объекты с заданными сущностями (без отношений) и получил все принадлежащие компании контакты с предикатом companyID =% @ . Из-за большого количества данных (4000+ компаний, 7000+ контактов) получение всех принадлежащих контактов занимает около секунды, поэтому мне пришла в голову идея использовать отношения (что отлично работает с локальными фиктивными данными).


Решение

С помощью приведенного ниже ответа мое текущее отображение выглядит следующим образом (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
...

8
задан flashfabrixx 20 August 2012 в 09:12
поделиться