2012-02-08 12 views
5

私はRestKitをはじめて使用しています。その機能セットは素晴らしいです。私はこのドキュメントを何度も読んできました。私はJSON paramsをフィードにPOSTしてJSONレスポンスをマップする方法を見つけるのに苦労しています。 stackoverflowで検索すると、GET経由でJSONパラメータを送信する方法が見つかりましたが、私のサーバーはPOSTのみを受け取ります。別のstackoverflowのスレッドからRestkitを使用してPOST JSONを実行し、応答を返す方法

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] 

(http://stackoverflow.com/questions/9102262/do-a-simple-json-post-using-:ここ

は、私がこれまで持っているコードです。 restkit)、私は次のコードで簡単なPOSTリクエストを行う方法を知っている:

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

私が望んでいた誰かが私には実行可能なソリューションにこれらの2つのコードスニペットを結婚に役立つだろう。

+0

この質問を確認してください。 http://stackoverflow.com/questions/9102262/do-a-simple-json-post-using-restkit – clopez

答えて

1

オブジェクトを投稿するには、パスオブジェクトに関連付けます。次に、ポストオブジェクトRKObjectManagerからメソッドを使用します。

私はあなたがすでに持っているコードと同じように、ベースパスが設定され、CDIssueのオブジェクトマッピングが定義されているようにRestKitを設定しているとします。このコードを試してみてください:

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

ご回答ありがとうございます。私は元の質問を2月に掲載しました。私はRestKitを放棄しました。私は本当にそれを使用する方法を覚えていないので、私はこの答えを試すことはできません。コードは私がRestkitのドキュメントを覚えているものとは違って見えますので、ライブラリを若干変更/更新したかどうか疑問です。 – elprl

関連する問題