2017-05-04 3 views
0

Je cherchais un moyen de mapper un objet vide à envoyer à un point de terminaison. L'appel doit être un POST, mais aucune donnée ne doit être affichée sur le noeud final (corps vide), il s'agit seulement d'appeler le noeud final directement sans données.Comment poster sans poster de données à l'aide de RestKit

J'ai essayé de faire le même tour que dans RestKit: How to handle empty response.body? mais en utilisant RKRequestDescriptor à la place.

Faire conduit donc à des erreurs suivantes lors de l'utilisation postData:nil dans RKObjectMapping « méthode de postObject:

exception Uncaught: RKRequestDescriptor objets doivent être initialisés avec une application dont la classe cible est NSMutableDictionary, obtenu « NSNull »(voir [RKObjectMapping requestMapping])

En utilisant NSNull pour la cartographie du RKRequestDescriptor semble fonctionner, mais nil semble échouer l'action de la cartographie.

Répondre

1

Comme l'indique l'erreur, il recherche un NSMutableDictionary pour l'action de mappage. donc en utilisant un vide NSMutableDictionary comme @{} au lieu de nil pour postObject fait l'affaire.

AFRKHTTPClient *client = [self getClient]; 

RKObjectManager *objectManager = [[RKObjectManager alloc] initWithHTTPClient:client]; 

RKObjectMapping *requestMapping = [RKObjectMapping mappingForClass:[NSNull class]]; 
[objectManager addRequestDescriptor: 
[RKRequestDescriptor requestDescriptorWithMapping:requestMapping 
             objectClass:[NSNull class] 
             rootKeyPath:nil 
              method:RKRequestMethodAny]]; 

RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[NSNull class]]; 
[objectManager addResponseDescriptor: 
[RKResponseDescriptor responseDescriptorWithMapping:responseMapping 
               method:RKRequestMethodPOST 
             pathPattern:nil 
              keyPath:nil 
             statusCodes:RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful)]]; 

[objectManager postObject:@{} // <-- this works, but nil doesn't 
         path:@"/api/some/endpoint" 
        parameters:nil 
         success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
          // succes code here 
         } failure:^(RKObjectRequestOperation *operation, NSError *error) { 
          // failure code here 
         }];