Мой вопрос является дубликатомКак извлечь простой JSON массив строк с помощью restkit
RestKit: how to fetch a simple JSON array of strings?
Однако, в то время как оригинальный автор нашел ответы полезным, я все еще потеряно. Этот вопрос содержит две отдельные ссылки, ни одна из которых не прошла достаточно далеко, чтобы помочь мне (полный новичок в KVC
и RestKit
).
Одна ссылка here и дает этот пример кода
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Whatever class]];
[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"someAttribute"]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping pathPattern:@"/whatever" keyPath:nil statusCodes:nil];
Что бы ни класс должен быть? Должно ли это быть NSString? Или это подразумевает, что я должен создать класс-оболочку с одним свойством NSArray *?
А что такое @ someAttribute? Опять же, это подразумевает класс-оболочку, в этом случае someAttribute будет именем свойства в моем классе-оболочке, который является NSArray *?
Другая ссылка - here, и пока она показывает выборку из массива в «класс-оболочку», класс-оболочка имеет только один NSNumber, а не массив. Поэтому неясно, как превратить этот пример в тот, который работает для получения всего массива.
Для справки сервер возвращает массив строк так же, как и исходный вопрос: ["string1", "string2", "string3"].
UPDATE
Вот код, который я пытался. Я создал класс-оболочку.
@interface CannedResponse : NSObject
@property (strong, nonatomic) NSString * response;
@end
Вот отображение:
RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[CannedResponse class]];
[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"response"]];
[manager addResponseDescriptor:[RKResponseDescriptor responseDescriptorWithMapping:mapping method:RKRequestMethodGET pathPattern:RESPONSES_API_PATH keyPath:nil statusCodes:nil;
И я звоню getObjectsAtPathForRouteName
Что я получаю обратно массив CannedReponses
, как ожидалось. Однако вместо того, чтобы помещать в свойство ответа NSString
. Я получаю RKMappingSourceObject
. Теперь RKMappingSourceObject
действительно содержит правильную строку.
Я просмотрю регистрацию RestKit
, чтобы узнать, могу ли я получить еще несколько подсказок.
UPDATE # 2
Как уже упоминалось here по blakewatters Я не делаю никакого отображения в этом примере и просто можно обойти использование RestKit
. Проблема в том, что весь код, который я пишу на уровне службы, использует RestKit
, и я слепо следил за шаблоном для всех вызовов. Для этого вызова правильным ответом может быть выяснить, как напрямую обращаться к AFNetworking
.