RestKit Object Mapping - одна сущность, два сопоставления - PullRequest
0 голосов
/ 27 марта 2012

После того, как мой последний вопрос был решен JSON, который я получаю с сервера, изменился на следующий, и я застрял при обработке отображения для сохранения данных с Core Data.

Сущность

 Key 
 - alias 
 - key
 - keyType
 - keyword
 - unid
 - until

JSON (с сервера)

{
    "documents": 1026,
    "configuration": 
    {
        ...
    },
    "data": 
    [
        {
            "alias": "",
            "key": "SALUTATION",
            "keyType": "S",
            "keyword": "Mr",
            "unid": ""
        },
        ...
        {
            "alias": "Automobile",
            "key": "ACCOUNT_MARKET_SEGMENT",
            "keyType": "A",
            "keyword": "Automobile",
            "unid": ""
        }
    ],
    "documentsFound": 770,
    "maxCount": -1,
    "since": "20120326200001",
    "until": "20120326211309"
}

Теперь я хочу сопоставить все данные от «данных» плюс ключ «до» для сущности «Ключ» , но не могу найти правильное решение. Мое отображение на данный момент для получения данных выглядит следующим образом и работает хорошо, но, конечно, не хватает кнопки «до».

RKManagedObjectMapping* keyMapping = [RKManagedObjectMapping mappingForClass:[Key class]];
keyMapping.rootKeyPath = @"data";
[keyMapping mapKeyPath:@"key" toAttribute:@"key"];
[keyMapping mapKeyPath:@"keyword" toAttribute:@"keywordEN"];
[keyMapping mapKeyPath:@"alias" toAttribute:@"alias"];
keyMapping.setDefaultValueForMissingAttributes = YES;

Спасибо за ваши идеи!

1 Ответ

2 голосов
/ 27 марта 2012

Возможно, вы захотите сделать два сопоставления.Первое отображение будет охватывать весь объект и будет связано с вложенным путем к данным.

RKObjectMapping *keyMapping = [RKObjectMapping mappingForClass:[Key class]];
[keyMapping mapAttributes:@"alias", @"key", nil];
[keyMapping mapKeyPath:@"keyword" toAttribute:@"keywordEN"];

RKObjectMapping *outerMapping = [RKObjectMapping mappingForClass:[Container class]];
[outerMapping mapKeyPath:@"data" toRelationship:@"keys" withMapping:keyMapping];
[outerMapping mapAttributes:@"since", @"until", "maxCount", "documentsFound", nil];

Это даст вам новый объект с вашими метаданными, а затем массив ключевых объектов наАтрибут ключей вашего контейнера.Вместо использования rootKeyPath вы можете использовать регистрацию отображения на основе resourcePath в ветке разработки 0.9.4 (готовящейся к выпуску).

...