RestKit: привязать вложенный массив к объекту

89
9

У меня есть два класса для отображения ответа JSON: Item и FrequentProps

Элемент обладает следующими свойствами:

frequentProps, identifier, name

FrequentProps обладает свойствами

propOne
propTwo
propThree
propFour

Вы можете видеть, что frequentProps в Item имеют тип FrequentProps.

Рассмотрим следующий ответ JSON:

[
{
"frequentProps": [
{
"propOne": 174
},
{
"propTwo": 9.726
},
{
"propThree": 2.021
},
{
"propFour": 25.07
}
],
"identifier": "4223",
"name": "TheName"
}
]

Внешняя часть JSON должна быть сопоставлена с объектом класса Item, вложенный объект Array должен быть сопоставлен с frequentProps как свойство объекта. К сожалению, frequentProps не отображается в Item недвижимости с тем же именем, но в NSArray (если определить тип собственности как NSArray, в противном случае имущество остается ноль).

Здесь конфигурация:

RKObjectMapping *itemMapping = [RKObjectMapping mappingForClass:[Item class]];
[item addAttributeMappingsFromDictionary:[Item attributesMapping]];
RKObjectMapping *frequentPropsMapping = [RKObjectMapping mappingForClass:[FrequentProps class]];
[frequentPropsMapping addAttributeMappingsFromDictionary:[FrequentProps attributesMapping]];
[itemMapping addPropertyMapping:[RKRelationshipMapping relationshipMappingFromKeyPath:@"frequentProps"
toKeyPath:@"frequentProps"
withMapping:frequentProps]];

// adding the response descriptor, etc...

Как я могу отображать frequentProps объекты непосредственно в объект типа FrequentProps, который остается свойством Item?

спросил(а) 2013-11-26T17:37:00+04:00 6 лет, 10 месяцев назад
1
Решение
57

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

Не идеально, но: что вы могли бы сделать, чтобы добавить свойство массива, используя собственный метод настройки. Когда вызывается сеттер, мутируйте данные, создавая экземпляр FrequentProps и устанавливая свойства из содержимого массива.

ответил(а) 2013-11-26T19:13:00+04:00 6 лет, 10 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема