RestKit と CoreData を使用している iOS アプリがあります。リクエストボディがNSDictionary
. 私が抱えている問題は、リクエストの本文に重複したキーが必要なことです。 NSDictionary
一意のキーが必要なので、これを機能させる方法がわかりません。
サーバーがリクエスト本文を期待する方法は次のとおりです。
<node>
<personId>2</personId>
<status>2</status>
<title>Dinosaur unearthed somewhere out there. </title>
<point>
<city>Somewhere</city>
<copy><![CDATA[An amazing discovery was unearthed as a local farmer was plowing his field]]></copy>
<state>Outthere</state>
<sequence>1</sequence>
</point>
<point>
<city>Somwhere</city>
<copy><![CDATA[Archeologists from around the world are amazed at the pristine condition of the remains. Also of note is that the farmer was only using a single blade plow on his John Deere tractor when it was unearthed. ]]></copy>
<sequence>2</sequence>
<state>Outthere</state>
</point>
<point>
......
</point>
</node>
これは、私がそれを機能させようとした方法の簡略化されたバージョンです....
params = [[NSMutableDictionary alloc] init];
nodes = [[NSMutableDictionary alloc] init];
nodeParams = [[NSMutableDictionary alloc] init];
NSString *personId = @"2";
NSString *status = @"2";
NSString *title = @"Dinosaur unearthed somewhere out there.";
NSString *city = @"Somewhere";
NSString *state = @"OutThere";
NSString *copyField = @"Testing this out to see if it works";
//Here I set up the point layer of the request body
//In my code this three line section is in a loop. Obviously this does not work because it just overwrites the objectForKey each time through the loop.
[params setObject:copyField forKey:@"copy"];
[params setObject:city forKey:@"city"];
[params setObject:state forKey:@"state"];
//Here I Set up the Node Layer of the request body
[nodeParams setObject:params forKey:@"point"];
[nodeParams setObject:personId forKey:@"personId"];
[nodeParams setObject:status forKey:@"status"];
[nodeParams setObject:title forKey:@"title"];
[nodes setObject:nodeParams forKey:@"node"];
NSLog(@"The Dictionary is %@",nodes);
実行時に、ログはボディが適切にフォーマットされていることを示していますが、それらは 1 つのポイント レイヤーのみであり、ループ内の最終パスからのデータが取り込まれています。これを回避するためのトリックを知っている人はいますか?
注として、postObject
メソッドは辞書をJSONシリアル化ツールに渡すため、NSDictionaryが必要だと思います。シリアル化ツールは、辞書が渡されることを期待していると思われます。間違っている場合は、誰かが知っている場合は修正してください。