Я новичок в ios/RESTKIT. Я пытаюсь использовать web-сервис с устройства ios, используя RESTKIT. Возвращение json может иметь 2 возможных результата.IOS - RESTKIT - результат сопоставления несколькими способами
A) На Отказ, результат JSON выглядит следующим образом (результатом является строка "нулевой" Код ошибки доступен):.
{
status: false,
result: null
error: NO_SUCH_USER
}
Отображение для (A)
RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[WsReturn class]];
[mapping mapKeyPath:@"result" toAttribute:@"result"];
[mapping mapKeyPath:@"status" toAttribute:@"status"];
[mapping mapKeyPath:@"error" toAttribute:@"error"];
[objectManager.mappingProvider setMapping:mapping forKeyPath:@"/"];
B)Успех, это выглядит (результат - «сложный объект». Код ошибки: null):
{
status: true,
result: {
name: "Some User",
tasks: [
{
name: "Some Task1",
taskId: 10
},
{
name: "Some Task2",
taskId: 20
}
]
},
error: null
}
Картирование (B)
RKObjectMapping* taskMapping = [RKObjectMapping mappingForClass:[Task class]];
[taskMapping mapKeyPath:@"name" toAttribute:@"name"];
[taskMapping mapKeyPath:@"taskId" toAttribute:@"taskId"];
[objectManager.mappingProvider setMapping:taskMapping forKeyPath:@"tasks"];
RKObjectMapping* resultMapping = [RKObjectMapping mappingForClass:[Result class]];
[resultMapping mapKeyPath:@"name" toAttribute:@"name"];
[resultMapping mapRelationship:@"tasks" withMapping:taskMapping];
[objectManager.mappingProvider setMapping:resultMapping forKeyPath:@"result"];
RKObjectMapping* cmplxMapng = [RKObjectMapping mappingForClass:[WsReturn class]];
[cmplxMapng mapKeyPath:@"status" toAttribute:@"status"];
[cmplxMapng mapKeyPath:@"error" toAttribute:@"error"];
[cmplxMapng mapRelationship:@"result" withMapping:resultMapping];
[objectManager.mappingProvider setMapping:cmplxMapng forKeyPath:@"/"];
Вопросы
1) (A) работает нормально. (B) нет. Можете ли вы указать некоторые указатели?
2) Для одного и того же вызова веб-службы «результатом» может быть строка (null) или сложный объект. Итак, как мне обрабатывать это в коде? Какое отображение я могу пройти? сопоставление или cmplxMapng (имя изменено, чтобы избежать горизонтальной прокрутки)?
[[RKObjectManager sharedManager] loadObjectsAtResourcePath: @ "/ myUrl"
objectMapping: HOW_TO_DECIDE_WHICH_MAPPING_TO_PASS_HERE Делегат: само];
Я считаю, что это распространенный сценарий. Я искал, но не смог найти соответствующие примеры. Возможно, я искал не то место. Мысли/указатели о том, как подойти к этому, помогут. Благодарю.
Сообщите мне, если мой ответ вам поможет или нет, а также, пожалуйста, примите, если это окажется полезным! – john
Этот вопрос по-прежнему открыт. Любые указатели помогут. Благодаря! – Ravi