使用RestKit处理原始数据的响应

时间:2014-11-14 10:37:33

标签: objective-c restkit

我正在使用RestKit 0.23.3。

对于特定路径模式(例如download_data/:dataId):

  • 我可以通过RestKit发送请求,没有任何问题,
  • 我希望回复包含任意内容类型(image/pngtext/plaintext/xml,...甚至application/json),
  • 如果服务器返回2xx状态代码,我想在成功处理程序块中接收HTTP响应的主体作为NSData实例(无论内容类型如何)。

这可能(以及如何)使用RestKit?

感谢。

2 个答案:

答案 0 :(得分:1)

使用新的restkit 0.20.3,您可以执行您的其余网络服务,如:

[[AppDelegate appDelegate].rkomForProbeList getObjectsAtPath:[NSString stringWithFormat:kResource_Probe,[[NSUserDefaults standardUserDefaults] valueForKey:kNS_DF_AccessRef]] parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
       NSLog(@"%@",operation.HTTPRequestOperation.responseString);
       // if raw data
 NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:[operation.HTTPRequestOperation.responseString dataUsingEncoding:NSUTF8StringEncoding] options:0 error:NULL];
       // if mapped
       arrayForProbe = [[NSMutableArray alloc] initWithArray:mappingResult.array];             
   } failure:^(RKObjectRequestOperation *operation, NSError *error) {
       NSLog(@"%@",operation.HTTPRequestOperation.responseString);
        NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:[,operation.HTTPRequestOperation.responseString dataUsingEncoding:NSUTF8StringEncoding] options:0 error:NULL];

       NSLog(@"%@",operation.HTTPRequestOperation.response.statusCode);
       NSLog(@"%@",error.description);
       [self hideViewContentAsProbesNotAvailable];
   }];

通过映射,您将直接从mappingarray获取对象。对于解析原始数据,您已从响应字符串中获取json对象。

rkomForProbeList是您的RKObjectManager实例。 kResource_Probe是资源路径。如果基本网址为http://www.hi.com/且您的其他API需要http://www.hi.com/login,那么"登录"将是你的资源路径。

答案 1 :(得分:0)

我不熟悉RESTKit,但无论如何它可能对你有所帮助 我建议你使用NSURLSession这样的低级请求,因为RESTKit添加了很多抽象,这对于这个任务来说是不必要的。

[[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://yourSite.com"]
                                completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
    {
        if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
            NSInteger statusCode = [(NSHTTPURLResponse *)response statusCode];
            if (statusCode >= 200 && statusCode < 300) {
                // that's OK
            } else {
                // something wrong
            }
        }
    }] resume];