2013-09-18 3 views
0

У меня есть два родителя «Родитель» и «Ребенок». Родительская сущность имеет отношение «один-много» к дочернему объекту, а дочерний элемент имеет одно-одно отношение с родителем, а «родительское» сущность имеет уникальный идентификатор (атрибут первичного ключа), который я собираю каждый раз.Разрыв отношений данных ядра при обновлении базы данных - Restkit

Когда я называю API, ответ приходит как этот

{ 
    "parent": { 
     "ss": "1", 
     "uid": 200, 
     "me": "Successfully Retrieved", 
     "pn": 2, 
     "cl": [ 
      { 
       "cid": 1500, 
       "cn": "XYZ" 
      }, 
      { 
       "cid": 1501, 
       "cn": "ABC" 
      } 
     ] 
    } 
} 

выше ответ успешно отображается в БД. Я могу получить доступ к [parent.childs allObjects], который возвращает два объекта.

У меня есть дополнительная функция загрузки, которая вызывает тот же api и номер страницы, увеличиваемый на 1, и я получаю ответ (3 объекта), похожий на предыдущий. Но когда я пытаюсь получить данные из БД, я получаю только 3 объекта, которые пришли к последнему ответу. Связь для двух объектов, которые я сопоставил ранее, становится пустой. поэтому я не могу получить доступ ко всем объектам. Как я могу получить доступ ко всем данным из БД по отношениям.

Это, как я отображение

RKObjectManager *manager = [[RestKit sharedDataManager] objectManager]; 
     RKEntityMapping *parentMapping = [[MFResponseMapper sharedInstance]parentMapper]; //Primary key is mapping here 
     RKEntityMapping *childMapping = [[MFResponseMapper sharedInstance]childMapper]; //Child name and Id is mapping here. 

     [parentMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"cl" 
                        toKeyPath:@"childs" 
                        withMapping:childMapping]]; 


     RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:parentMapping 
                         pathPattern:nil 
                          keyPath:@"parent" 
                         statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]; 

     [manager addResponseDescriptor:responseDescriptor]; 

Примечание: У меня есть удалить правило для Parent-Child (один-много) отношения в модели.

Благодаря

+0

Вы сохраняете базу данных после добавления этих объектов? Существует разница между изменением контекста и сохранением в базовом хранилище. – Bergasms

ответ

1

В отношении сопоставления отношений установите assignmentPolicy на RKUnionAssignmentPolicy.

+0

Ahhh .... Это может быть причиной. Я забыл об этом. Спасибо Wain за точку. –

0

Вы должны добавить

parentMapping.identificationAttributes = @[@"uid"]; 

и

childMapping.identificationAttributes = @[@"cid"]; 

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

+0

Спасибо за ответ. как я уже упоминал, у меня есть первичный ключ (идентификационный атрибут) для моего родителя и ребенка. Я не получаю дубликатов записей моего родителя. но дочерний объект полностью обновлен новым. поэтому я могу получить доступ только к новым записям. –

Смежные вопросы