Я новичок в ios / RESTKIT.Я пытаюсь использовать веб-сервис с устройства ios, используя RESTKIT.Возвращение JSON может иметь 2 возможных результата.
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) Вкл. Успех , это выглядит так (результат - «сложный объект». Код ошибки равен нулю):
{
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) работает нормально.(Б) нет.Можете ли вы предоставить несколько указателей?
2) Для одного и того же вызова веб-службы часть «result» может быть строкой (null) или сложным объектом.Так как мне справиться с этим в коде?Какое отображение я передаю?mapping или cmplxMapng (имя изменено, чтобы избежать горизонтальной прокрутки)?
[[RKObjectManager sharedManager] loadObjectsAtResourcePath: @ "/ myUrl"
objectMapping: HOW_TO_DECIDE_WHTO_MAP:
Я считаю, что это распространенный сценарий.Я искал, но не мог найти соответствующие примеры.Может быть, я посмотрел не в том месте.Мысли / указатели о том, как подойти к этому, помогут.Спасибо.