Вопрос

После прочтения Картирование объекта на 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"
   }
 ]

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

Вопрос

Можно ли составить на карту каждый контакт с принадлежащей компанией (идентифицированным атрибутом Идентификатор компании) при импорте с данными методами 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
...

Это было полезно?

Решение

Да, RESTKIT может увлажнить эту связь для вас во время картирования. На вашей модели контакта вам нужно будет сделать следующее:

  • Добавьте сопоставление отношений в материнскую компанию: [objectMapping mapRelationship:@"company" withMapping:companyMapping]
  • Сопоставьте атрибут CompanyId на модель контакта
  • Убедитесь, что у вас есть PrimaryKeyAttribute, настроенный на обоих классах
  • Попросите Restkit увлажнить отношения: [objectMapping connectRelationship:@"company" withObjectForPrimaryKeyAttribute:@"companyID"];

После того, как Restkit завершил картирование полезной нагрузки, он пройдет через сбор и увлажняет любые отношения. Обработка откладывается до тех пор, пока после отображения в случае, если полезная нагрузка фактически создаст объекты, которые вам необходимы для удовлетворения соединений.

В филиале разработки вам есть альтернативный рабочий процесс. Ранее на этой неделе я добавил поддержку для увлажнения отношений с человеком, используя массив идентификаторов в полезной нагрузке. Это позволило бы вам отправить список контактов, которые принадлежат компании в полезной нагрузке. Это может быть более эффективным для вашего варианта использования.

Дополнительная информация из моего сообщения в список рассылки RESTKIT: http://groups.google.com/group/restkit/msg/416951f86b2862d1

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top