RestKit 响应映射问题 - <RKMappingResult:, results= "<null>" =

Posted

技术标签:

【中文标题】RestKit 响应映射问题 - <RKMappingResult:, results= "<null>" =【英文标题】:RestKit Response map issue - <RKMappingResult:, results= "<null>" =RestKit 响应映射问题 - <RKMappingResult:, results= "<null>" = 【发布时间】:2013-09-27 09:28:08 【问题描述】:

我正在使用休息套件 0.20.0。我有一个 JSON 格式的请求,就像


  "CreateSession" : yes,
  "DistributionChannel" : "string1",
  "Login" : "string2",
  "Nickname" :"string3",
  "Password" :"string4",
  "PhysicalDevice" :
   
     "DeviceId" : "string5",
     "DeviceTypeCode" : 123,
     "PhysicalDeviceTypeCode" : 1233,
    

我做了这个

 NSDictionary * dictionary = @
                            @"CreateSession":@"yes",
                            @"DistributionChannel":@"string1",
                            @"Login": @"string2",
                            @"Nickname":  @"string3",
                            @"Password":  @"string4",
                            @"PhysicalDevice":  @ @"DeviceId":  @"string5",
                                                   @"DeviceTypeCode":  @"123",
                                                   @"PhysicalDeviceTypeCode": @"1233" 
                            ;


    RKObjectMapping *registerDeviceRequestMapping = [RKObjectMapping requestMapping];
        [registerDeviceRequestMapping addAttributeMappingsFromDictionary:dictionary];

分别为请求和响应创建描述符。将其添加到 RKObjectManager 共享对象中,还设置了基本 url 和 headers。

我调用它来启动请求

RKHTTPRequestOperation *operation = [[RKObjectManager sharedManager] appropriateObjectRequestOperationWithObject:dictionary method:RKRequestMethodPOST path:@"RegisterDevice" parameters:nil];

    [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) 
         NSLog(@"response   %@",[responseObject description]);

     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
         NSLog(@"Failed with error: %@", [error localizedDescription]);
    ];

        [operation start];

我得到 200 状态,但无法映射响应中的值。我得到的映射结果是

<RKMappingResult: 0x849bf60, results=
    "<null>" = "<Response: 0x849b390>";

尝试了几个链接,但似乎没有一个提供好的解决方案。我需要映射的实际响应是


    "PhysicalDevice": 
        "AddDate": "string1",
        "AuthenticationKey": "string2",
        "DeviceId": "string3",
        "DeviceTypeCode": 33,
        "DeviceTypeName": "string4",
        "Id": 10130,
        "ModDate": "2013-09-27T07:21:34.240Z",
        "PhysicalDeviceTypeCode": 1233,
        "SerialNumber": "string5",
        "Status": 1,
        "StatusName": "string6"
    ,
    "RemainingDeviceAssociations": 4,
    "SessionId": "string7"

注意:request和response中的值是虚拟值,但它们的结构是给定的

【问题讨论】:

【参考方案1】:

<RKMappingResult: 0x849bf60, results= "<null>" = "<Response: 0x849b390>";

这看起来像是一个有效的响应。响应映射为您提供了一个字典,其中键是键路径,响应是您指定的对象。因此,在这种情况下,键是 nil,而您的对象是 Response。而Response 没有实现description 方法,所以你只需要获取地址。

你没有展示你的映射或描述符,所以我不能说更多。你或许可以在调试器中查看Response的内容...

【讨论】:

以上是关于RestKit 响应映射问题 - <RKMappingResult:, results= "<null>" =的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 不喜欢为 POST 响应映射不同的对象

映射 RestKit 后响应

RestKit 响应未正确映射

使用 RESTKit 映射带有括号的 JSON 响应

如何在没有响应描述映射的情况下使用 RestKit?

restkit 映射嵌套数组为空(带有 json 响应的嵌套 restkit 请求)