在 POST JSON RestKit 中检索 null

Posted

技术标签:

【中文标题】在 POST JSON RestKit 中检索 null【英文标题】:Retrived null in POST JSON RestKit 【发布时间】:2013-12-16 15:15:36 【问题描述】:

我使用过 RestKit 并与托管对象进行了映射。然后我使用postObject 方法,但在检索主体时遇到问题,因为它映射为空。

 RKObjectManager  *objectManager = [RKObjectManager managerWithBaseURL:baseURL];

// Serialize to JSON
objectManager.requestSerializationMIMEType = RKMIMETypeJSON;

[RKObjectManager setSharedManager:objectManager];

RKEntityMapping *searchInfoMapping = [RKEntityMapping mappingForEntityForName:NSStringFromClass([Search class]) inManagedObjectStore: objectManager.managedObjectStore];
searchInfoMapping.identificationAttributes = @[ @"faresQueryType" ];

[searchInfoMapping addAttributeMappingsFromDictionary:@
    @"id" : @"ID",
    @"type" : @"Type",
    @"count" : @"Count",
    @"route” : @"route”,
];

RKObjectMapping     *searchInfoRequestMapping =[RKObjectMapping requestMapping];
[searchInfoRequestMapping addAttributeMappingsFromDictionary:@
    @"id" : @"ID",
    @"type" : @"Type",
    @"count" : @"Count",
    @"route” : @"route”,
];

//Data mapping is a method that returns an RKObjectMapping for my model
RKResponseDescriptor * searchDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:searchInfoMapping pathPattern:nil keyPath:nil statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager addResponseDescriptorsFromArray:@[searchDescriptor,]];

//Inverse mapping, to perform a POST

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:searchInfoRequestMapping  objectClass:[Search class] rootKeyPath:nil];
[objectManager addRequestDescriptor:requestDescriptor];


[appDelegate.objectManager postObject:nil path:@"routes" parameters:postParameters success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) 
            NSLog(@"Success case %@",mappingResult);
         failure:^(RKObjectRequestOperation *operation, NSError *error) 
            NSLog(@"Failure in Flight Mapping %@",error);
            [alert show];
        ];

编辑

      //JSON Result 

    
    "currency": 
        "code": "USD",
        "name": "U.S. Dollar",
        "symbol": "US$",
        "exchange_rate": 1
    ,
    "routes": [
        
            "id": "MS648-2022:MS985-2110",
            "fares": [
                
                    "price": 745.32,
                    "description": "Economy",
                    "deeplink": "http://www.wego.com/flights/providers/2/deeplinks?search_id=CQtxCXQCRfmwhp72PAjopQ&trip_id=RUH:NYC:2013-12-20&fare_id=sky-tours.com:0&route=RUH-JFK",
                    "provider_code": "sky-tours.com",
                    "deeplink_params": 
                        "trip_id": "RUH:NYC:2013-12-20",
                        "route": "RUH-JFK",
                        "search_id": "CQtxCXQCRfmwhp72PAjopQ",
                        "fare_id": "sky-tours.com:0"
                    
                
            ]
        
    ]

【问题讨论】:

给出发送和接收的 JSON 的更多细节。 searchInfoMapping 似乎与结果 JSON 没有可比性。 Search 对象应该如何与返回的 JSON 相关联?我希望搜索对象与 JSON 中的 routes 信息有关系... 我在根值之前得到了你,但现在我需要检索“路线”,只需考虑“搜索”是“路线”。 Search 是要发布的单个对象,因此 RestKit 想要将 POST 映射回该单个对象。类似于该对象的整体细节,然后将routes 纳入关系。你能这样工作吗? 你有在 RestKit JSON 中使用 POST 和 CoreData 的好例子吗? 【参考方案1】:

当您调用postObject(当前您有postObject:nil)时,您需要提供Search 对象而不是nil。这告诉 RestKit 使用哪个请求映射来发送请求。由于未设置它,服务器可能不会拥有所有必需的信息(无法通过提供的信息来判断)。

【讨论】:

但是我在 viewcontroller 中调用 postObject 方法并在 appDelegation 中调用映射 从哪里调用它并不重要。您是否有应该传递的 Search 实例?您期望发送和接收什么?什么是postParameters 是的,我在 CoreData 托管对象中有 Search 实例,并且 postParameters 是 NsMutableDictionary。我现在在不使用 coreData 和映射的情况下进行了测试,它工作正常。但是当我使用上述代码映射时,有时会检索数据,有时未检索到关系数据 我认为您应该为faresQueryType 添加一个映射 - 并显示您发送和接收的详细信息... 您能帮我提供完整的示例 RestKit JSON POST 数据以及映射、响应和请求描述符吗?

以上是关于在 POST JSON RestKit 中检索 null的主要内容,如果未能解决你的问题,请参考以下文章