我刚刚切换到 RestKit 0.2,我目前正在使用新的“HttpClient”,它基本上是一个 AFHTTPClient。我有这行代码:
RKObjectManager* objectManager = [RKObjectManager sharedManager];
NSDictionary* params = [[NSDictionary alloc] initWithObjectsAndKeys: login, @"username", password, @"password", nil];
[[objectManager HTTPClient]postPath:@"users/login/?format=json" parameters:params
success:^(AFHTTPRequestOperation *operation, id responseObject)
{
//reponseObject vs operation.response
NSLog(@"%@", responseObject);
}
failure:^(AFHTTPRequestOperation *operation, NSError *error)
{
NSLog(@"ERROR");
}];
此 POST 调用以以下形式返回 JSON 响应:{"api_key":"....","username":"...."}。就如此容易。
在切换到 0.2 之前,我可以通过以下方式在响应中获取 api_key 键:
[[RKClient sharedClient] post:@"/users/login/?format=json" usingBlock:^(RKRequest *request)
{
request.onDidLoadResponse = ^(RKResponse *response)
{
id parsedResponse = [response parsedBody:NULL];
NSString *apiKey = [parsedResponse valueForKey:@"api_key"];
}
}.....];
http://restkit.org/api/master/Classes/RKResponse.html
但是现在,我不能这样做,如果我在 responseObject 上执行 NSLog,我会得到:
<7b227265 61736f6e 223a2022 41504920 4b657920 666f756e 64222c20 22617069 5f6b6579 223a2022 61356661 65323437 66336264 35316164 39396338 63393734 36386438 34636162 36306537 65386331 222c2022 73756363 65737322 3a207472 75657d>
奇怪的是,如果我这样做:
NSLog(@"%@", operation.responseString);
我确实显示了 JSON(在 NSString 中)。
所以两个问题:
1)为什么打印 responseObject 显示 HEX 代码,而不是实际的 JSON 响应?
2) 为什么如果我执行 operation.responseString 会显示实际的响应对象?从 JSON 解析后,有没有办法在 ResponseObject 中获取实际数据?