如何使用restkit获取简单的json字符串数组

Mic*_*lch 1 objective-c ios kvc restkit-0.20

我的问题是重复的

RestKit:如何获取简单的JSON字符串数组?

然而,虽然原作者发现答案有帮助,但我仍然输了.这个问题有两个单独的引用,这些引用都不足以帮助我(一个完整的初学者KVCRestKit).

这里有一个参考,给出了这个示例代码

RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[Whatever class]];
[mapping addPropertyMapping:[RKAttributeMapping attributeMappingFromKeyPath:nil toKeyPath:@"someAttribute"]];
RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:mapping pathPattern:@"/whatever" keyPath:nil statusCodes:nil];
Run Code Online (Sandbox Code Playgroud)

无论什么课程应该是什么?应该是NSString吗?或者这是否意味着我应该创建一个包含一个属性为NSArray*的包装类?

什么是@"someAttribute"应该是什么?同样,这是否意味着一个包装类,在这种情况下,someAttribute将是我的包装类上属性的名称,即NSArray*?

另一个参考是在这里,虽然它显示从数组提取到"包装类",但包装类只有一个NSNumber,而不是一个数组.因此,不清楚如何将该示例转换为适用于获取整个数组的示例.

作为参考,服务器返回一个字符串数组,就像原始问题一样:["string1","string2","string3"].

UPDATE

这是我尝试过的代码.我已经创建了一个包装类.

@interface CannedResponse : NSObject

@property (strong, nonatomic) NSString * response;

@end
Run Code Online (Sandbox Code Playgroud)

这是映射:

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;
Run Code Online (Sandbox Code Playgroud)

我正在打电话 getObjectsAtPathForRouteName

我得到的是一系列CannedReponses预期的.但是,而不是NSString被放入响应属性.我得到了一个RKMappingSourceObject.现在RKMappingSourceObject确实包含正确的字符串.

我将通过RestKit控制台中的日志记录查看是否可以收集更多线索.

更新#2

如前所述这里通过blakewatters我不这样做在这个例子中的任何映射,可以只是绕过使用RestKit.问题是我在服务层编写的所有代码都在使用RestKit,我盲目地遵循所有调用的模式.对于这个电话,正确的答案可能是弄清楚如何AFNetworking直接访问.

Mic*_*lch 6

下面是使用blakewatters其他评论的更好的答案在这里

不要将RestKit用于此类请求.使用AFNetworking来完成它.你可以像这样访问AFHTTPClient

[RKObjectManager sharedManager].HTTPClient
Run Code Online (Sandbox Code Playgroud)

然后代码看起来像这样

AFHTTPClient * client = [RKObjectManager sharedManager].HTTPClient;
[client getPath:YOUR_PATH
     parameters:nil
        success:^(AFHTTPRequestOperation *operation, id responseObject) {
            success([NSArray arrayWithArray:responseObject]);
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            failure(operation.response.statusCode);
        }];
Run Code Online (Sandbox Code Playgroud)