Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c RestKit POST响应具有错误映射_Objective C_Restkit 0.20 - Fatal编程技术网

Objective c RestKit POST响应具有错误映射

Objective c RestKit POST响应具有错误映射,objective-c,restkit-0.20,Objective C,Restkit 0.20,当我发布一个对象时,响应映射到错误的对象 // Resquest for post new article RKObjectMapping* articleRequestMapping = [RKObjectMapping requestMapping]; [articleRequestMapping addAttributeMappingsFromDictionary:@{ @"titl

当我发布一个对象时,响应映射到错误的对象

// Resquest for post new article

RKObjectMapping* articleRequestMapping = [RKObjectMapping requestMapping];
[articleRequestMapping addAttributeMappingsFromDictionary:@{
                                                     @"title"   : @"title",
                                                     @"body"    : @"body",
                                                     }];

RKRequestDescriptor *requestDescriptorArticle = [RKRequestDescriptor
                                                 requestDescriptorWithMapping:articleRequestMapping
                                                 objectClass:[Article class]
                                                 rootKeyPath:nil
                                                 method:RKRequestMethodPOST];

[objectManager addRequestDescriptor:requestDescriptorArticle];


// Response for post new article 
// response.body={
//   "result": {
//     "ok": 1
//   }
// }

RKObjectMapping *resultMapping = [RKObjectMapping mappingForClass:[Result class]];
[resultMapping addAttributeMappingsFromDictionary:@{
                                                    @"ok"   :  @"ok"
                                                  }];

RKResponseDescriptor *resArticleCreate = [RKResponseDescriptor
                                          responseDescriptorWithMapping:resultMapping
                                          method:RKRequestMethodPOST
                                          pathPattern:[NSString stringWithFormat:@"%@%@",apiVersion,@"/articles"]
                                          keyPath:@"result"
                                          statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)];
[objectManager addResponseDescriptor:resArticleCreate];
日志:

2013-10-09 07:05:43.335 TabbedDemo[35156:4703] D restkit.object_mapping:RKMapperOperation.m:378 Executing mapping operation for representation: {
    result =     {
        ok = 1;
    };
}
 and targetObject: <Article: 0x7d88670>

这是RestKit的问题还是我做错了?

这是RestKit的设计假设。它确实会在某些情况下引发问题,比如你的问题。当发布和对象时,RestKit将始终尝试将响应映射到同一个对象中

您的变通解决方案是一个很好的选择


您也可以发布一个字典,并将结果映射回该字典。

这是一个RestKit设计假设。它确实会在某些情况下引发问题,比如你的问题。当发布和对象时,RestKit将始终尝试将响应映射到同一个对象中

您的变通解决方案是一个很好的选择


您也可以发布一本词典,并将结果映射回该词典。

谢谢。让我困惑的是,为什么我需要RestKit,而不是自己用AFNetworking和JSON做这些事情。我花了太多时间试图让它工作,比如对象映射、请求路由、子对象映射、动态映射等等。。。最后,我不得不以旧的方式做一些事情,失去了处理任意协议的灵活性。你可以使用AFNetworking,你应该在RestKit无效或过度使用的地方使用它。在使用AFNetworking获取JSON响应,然后使用RestKit映射器操作的情况下,您也可以执行一些混合操作。。。您如何决定使用什么以及何时开始使用。谢谢。让我困惑的是,为什么我需要RestKit,而不是自己用AFNetworking和JSON做这些事情。我花了太多时间试图让它工作,比如对象映射、请求路由、子对象映射、动态映射等等。。。最后,我不得不以旧的方式做一些事情,失去了处理任意协议的灵活性。你可以使用AFNetworking,你应该在RestKit无效或过度使用的地方使用它。在使用AFNetworking获取JSON响应,然后使用RestKit映射器操作的情况下,您也可以执行一些混合操作。。。你如何决定使用什么,何时开始体验。
// normal one, but with wrong mapping object.

//    [[RKObjectManager sharedManager] postObject:article path:nil parameters:@{@"_csrf" : self._csrf}
//                                        success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult){
//                                            NSLog(@"result:%@",[mappingResult firstObject]);
//                                        }
//                                        failure:^(RKObjectRequestOperation *operation, NSError *error) {
//                                            NSLog(@"Hit error: %@", error);
//                                        }];

RKObjectRequestOperation *operation = [[RKObjectManager sharedManager] appropriateObjectRequestOperationWithObject:article
                                                                        method:RKRequestMethodPOST
                                                                        path:nil
                                                                        parameters:@{@"_csrf" : self._csrf}];
Result *r1 = [Result new];
operation.targetObject = r1;

[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
    NSLog(@"result:%@",[mappingResult firstObject]);
} failure:^(RKObjectRequestOperation *operation, NSError *error) {
    NSLog(@"Hit error: %@", error);
}];

[operation start];