Я только начал смотреть на RestKit сегодня, поэтому я далеко от авторитета. Однако, глядя на отличную документацию Блейка, мне кажется, что вы слишком усложняете это (ваш опубликованный JSON не проверяет BTW). Если у вас нет особой необходимости иметь BasicInfo
объект, я бы удалил его и настроил ваш JSON следующим образом:
{
"people": [
{
"age": 10,
"favoriteClass": "math",
"name": "John",
"type": 1,
"friends": [
{
"age": 12,
"favoriteClass": "PE",
"friends": [],
"name": "Bill",
"type": 1
},
{
"age": 11,
"favoriteTeacher": "Mrs. Manson",
"friends": [],
"name": "Sara",
"type": 2
},
{
"age": 9,
"favoriteTeacher": "Mr. Chase",
"friends": [],
"name": "Ronda",
"type": 2
}
]
}
]
}
Тогда вы сможете использовать подход (1), который он описывает в разделе Динамическое сопоставление объектов документа Сопоставление объектов. Мне кажется, единственное отличие, которое вы По сравнению с примером, который он приводит, у вас есть несколько дополнительных иваров в каждом из классов Boy
и Girl
, и вы используете число вместо строки для идентификации Boy
против Girl
. Вы можете справиться с этим, изменив объявления, которые он дает:
// Basic setup
RKObjectMapping* boyMapping = [RKObjectMapping mappingForClass:[Boy class]];
[boyMapping mapAttributes:@"age", @"name", @"favoriteClass",nil];
RKObjectMapping* girlMapping = [RKObjectMapping mappingForClass:[Girl class]];
[girlMapping mapAttributes:@"age", @"name", @"favoriteTeacher", nil];
// Configure the dynamic mapping via matchers
[dynamicMapping setObjectMapping:boyMapping whenValueOfKeyPath:@"type" isEqualTo:@"1"];
[dynamicMapping setObjectMapping:girlMapping whenValueOfKeyPath:@"type" isEqualTo:@"2"];
Тип совпадения может быть не совсем правильным - как я уже сказал, я только сегодня начал читать этот материал.