如何使用restkit获取简单的json字符串数组
-
20-12-2019 - |
题
我的问题是重复的
然而,虽然原作者发现答案很有帮助,但我仍然迷失了方向。这个问题有两个单独的参考文献,但都不足以帮助我(一个完全的初学者 KVC
和 RestKit
).
一个参考是 这里 并给出了这个示例代码
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 * 的属性名称?
另一个参考是 这里 虽然它显示从数组获取到“包装类”,但包装类只有一个 NSNumber,而不是一个数组。因此,尚不清楚如何将该示例转变为可获取整个数组的示例。
作为参考,服务器返回一个字符串数组,就像原始问题一样:[“字符串1”,“字符串2”,“字符串3”]。
更新
这是我尝试过的代码。我创建了一个包装类。
@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
登录控制台看看我是否可以收集更多线索。
更新#2
如上所述 这里 作者:blakewatters 我在这个例子中没有做任何映射,可以绕过使用 RestKit
. 。问题是我在服务层编写的所有代码都使用 RestKit
我盲目地遵循所有通话的模式。对于此调用,正确的答案可能是弄清楚如何访问 AFNetworking
直接地。
解决方案
这是使用布莱克沃特斯的另一条评论的更好答案 这里
不要使用 RestKit 来处理这样的请求。使用 AFNetworking 来做到这一点。你可以像这样访问 AFHTTPClient
[RKObjectManager sharedManager].HTTPClient
代码看起来就像这样
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);
}];
其他提示
事实证明,我在更新部分中执行此操作的方式确实有效。
RKMappingSourceObject 是一个转移注意力的东西。它实现了 NSProxy,因此它的行为就像我期望的 NSString 一样。
我对幕后发生的事情的猜测:RestKit 在反序列化时创建 RKMappingSourceObject 实例。当它意识到我拥有的这些对象是基元并且不映射到任何东西时,它只是将它们留在映射对象中,但由于它实现了 NSProxy,所以它可以将任何请求转发到底层字符串。