2012-02-08 9 views
5

Estoy utilizando RestKit por primera vez, y su conjunto de características se ve muy bien. He leído el documento varias veces y estoy luchando por encontrar una forma de POST JSON params a un feed y mapear la respuesta JSON. Desde la búsqueda en stackoverflow encontré una forma de enviar los parámetros JSON a través de un GET, pero mi servidor solo toma POST.Cómo utilizar Restkit para POST JSON y respuesta de mapa

Aquí está el código que tengo hasta ahora:

RKObjectMapping *issueMapping = [RKObjectMapping mappingForClass:[CDIssue class]]; 
[objectMapping mapKeyPath:@"issue_id" toAttribute:@"issueId"]; 
[objectMapping mapKeyPath:@"title" toAttribute:@"issueTitle"]; 
[objectMapping mapKeyPath:@"description" toAttribute:@"issueDescription"]; 
RKObjectManager* manager = [RKObjectManager objectManagerWithBaseURL:@"http://restkit.org"]; 
RKManagedObjectStore* objectStore = [RKManagedObjectStore objectStoreWithStoreFilename:@"News.sqlite"]; 
objectManager.objectStore = objectStore; 

NSDictionary params = [NSDictionary dictionaryWithObjectsAndKeys: @"myUsername", @"username", @"myPassword", @"password", nil]; 
NSURL *someURL = [objectManager.client URLForResourcePath:@"/feed/getIssues.json" queryParams:params]; 

[manager loadObjectsAtResourcePath:[someURL absoluteString] objectMapping:objectMapping delegate:self] 

Desde el hilo otra stackoverflow (http://stackoverflow.com/questions/9102262/do-a-simple-json-post-using- restkit), sé cómo hacer una solicitud POST sencilla con el siguiente código:

RKClient *myClient = [RKClient sharedClient]; 
NSMutableDictionary *rpcData = [[NSMutableDictionary alloc] init ]; 
NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; 

//User and password params 
[params setObject:password forKey:@"password"]; 
[params setObject:username forKey:@"email"]; 

//The server ask me for this format, so I set it here: 
[rpcData setObject:@"2.0" forKey:@"jsonrpc"]; 
[rpcData setObject:@"authenticate" forKey:@"method"]; 
[rpcData setObject:@"" forKey:@"id"]; 
[rpcData setObject:params forKey:@"params"]; 

//Parsing rpcData to JSON! 
id<RKParser> parser = [[RKParserRegistry sharedRegistry] parserForMIMEType:RKMIMETypeJSON]; 
NSError *error = nil; 
NSString *json = [parser stringFromObject:rpcData error:&error];  

//If no error we send the post, voila! 
if (!error){ 
    [[myClient post:@"/" params:[RKRequestSerialization serializationWithData:[json dataUsingEncoding:NSUTF8StringEncoding] MIMEType:RKMIMETypeJSON] delegate:self] send]; 
} 

yo estaba esperando que alguien me ayudaría a case con estos dos fragmentos de código en una solución viable.

+0

Marque esta pregunta, esto debería ayudarlo. http://stackoverflow.com/questions/9102262/do-a-simple-json-post-using-restkit – clopez

Respuesta

1

Poner un objeto lo que hago es asociar un caminoa un objeto. A continuación, utilice el método postObject desde RKObjectManager.

Supongo que ya ha configurado RestKit para que tenga la ruta base establecida y haya definido el mapeo de objeto para su CDIssue como lo hizo en el código que ya tiene. Con eso en mente pruebe este código:

//We tell RestKit to asociate a path with our CDIssue class 
RKObjectRouter *router = [[RKObjectRouter alloc] init]; 
[router routeClass:[CDIssue class] toResourcePath:@"/path/to/my/cdissue/" forMethod:RKRequestMethodPOST]; 
[RKObjectManager sharedManager].router = router; 

//We get the mapping for the object that you want, in this case CDIssue assuming you already set that in another place 
RKObjectMapping *mapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[CDIssue class]]; 

//Post the object using the ObjectMapping with blocks 
[[RKObjectManager sharedManager] postObject:myEntity usingBlock:^(RKObjectLoader *loader) { 

    loader.objectMapping = mapping; 
    loader.delegate = self; 

    loader.onDidLoadObject = ^(id object) { 
     NSLog(@"Got the object mapped"); 
     //Be Happy and do some stuff here 
    }; 

    loader.onDidFailWithError = ^(NSError * error){ 
     NSLog(@"Error on request"); 
    }; 

    loader.onDidFailLoadWithError = ^(NSError * error){ 
     NSLog(@"Error on load"); 
    }; 

    loader.onDidLoadResponse = ^(RKResponse *response) { 
     NSLog(@"Response did arrive"); 
     if([response statusCode]>299){ 
      //This is useful when you get an error. You can check what did the server returned 
      id parsedResponse = [KFHelper JSONObjectWithData:[response body]]; 
      NSLog(@"%@",parsedResponse); 
     } 

    }; 


}]; 
+0

Gracias por su respuesta. Publiqué la pregunta original en febrero y abandoné RestKit después de no obtener respuestas. Realmente no puedo recordar cómo usarlo ahora, así que no puedo probar esta respuesta. El código se ve diferente a lo que recuerdo de la documentación del kit de recuperación, así que me pregunto si han cambiado/actualizado la biblioteca de algún modo. – elprl

Cuestiones relacionadas