Lorsque je fais un POST d'un objet, la réponse est mappée sur un mauvais objet.Réponse POST RestKit avec un mappage incorrect
// 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];
Le journal:
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>
targetObject est l'article ..., mais il censé être ... Résultat
Je trouve la vieille question similaire ici: https://github.com/RestKit/RestKit/issues/1081 J'utilise v0.21 (branche master), maintenant je le résous en forçant targetObject.
// 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];
Est-ce un problème RestKit ou je fais mal?
Merci. Ce qui me rend confus est pourquoi j'ai besoin de RestKit au lieu de faire ces trucs avec AFNetworking et JSON par moi-même. J'ai passé trop de temps à essayer de le faire fonctionner, comme mappage d'objets, routage de requête, mappage de sous-objet, mappage dynamique, ... Et enfin, je dois faire quelque chose à l'ancienne et perdre la flexibilité de gérer un protocole arbitraire . – blackgun
Vous pouvez utiliser AFNetworking, et vous devez l'utiliser lorsque RestKit n'est pas efficace ou est trop puissant. Vous pouvez toujours faire quelque chose d'hybride lorsque vous utilisez AFNetworking pour obtenir la réponse JSON et ensuite utiliser une opération de mappeur RestKit ... Comment vous décidez de ce qu'il faut utiliser et quand il s'agit d'expérimenter. – Wain