2012-02-08 14 views
5

Używam programu RestKit po raz pierwszy, a jego zestaw funkcji wygląda świetnie. Wielokrotnie czytałem ten dokument i staram się znaleźć sposób na parowanie JSON POST na kanał i zmapować odpowiedź JSON. Od wyszukiwania na stackoverflow znalazłem sposób na wysłanie paramtów JSON przez GET, ale mój serwer pobiera tylko POST.Jak używać narzędzia Restkit do testu POST JSON i mapy

Oto kod mam tak daleko:

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] 

z wątku innego stackoverflow (http://stackoverflow.com/questions/9102262/do-a-simple-json-post-using- restkit), wiem jak zrobić prosty żądanie POST z następującego kodu:

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]; 
} 

miałem nadzieję, że ktoś pomoże mi poślubić te dwa fragmenty kodu w realne rozwiązania.

+0

Sprawdź to pytanie, to powinno ci pomóc. http://stackoverflow.com/questions/9102262/do-a-simple-json-post-using-restkit – clopez

Odpowiedz

1

Aby dodawać obiektu, co mogę zrobić, to kojarzy ścieżkędo obiektu. Następnie użyj metody postObject z RKObjectManager.

Przypuszczam, że już skonfigurowałeś pakiet RestKit, dzięki czemu masz ustawioną ścieżkę podstawową i zdefiniowałeś mapowanie obiektów dla twojego CDI, jak masz w kodzie, który już masz. Mając to na uwadze, wypróbuj ten kod:

//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

Dziękujemy za odpowiedź. Opublikowalem oryginalne pytanie w lutym i opuściłem RestKit po otrzymaniu odpowiedzi. Nie pamiętam, jak go teraz użyć, więc nie mogę przetestować tej odpowiedzi. Kod wygląda inaczej, niż pamiętam z dokumentacji pakietu, więc zastanawiam się, czy zmieniły/zaktualizowały bibliotekę. – elprl

Powiązane problemy