0

私はRestKitを使用して、オブジェクトをサーバーに投稿したり、取得したりしています。GETはマッピングでうまく機能します。しかし、POSTはそうではありません。

受信したJSONの形式は次のとおりです。

{"user":{"id":98,"notification":false,"id":98,"token_session":"506934689"}}

問題は、送信されたJSONの投稿オブジェクトが次の形式である場合です。

{"id":98,"notification":false,"id":98,"token_session":"506934689"}

ご覧のとおり、「user」クラス名がありません。(両方のJSON形式で動作するようにservur APIを変更することはできません)

誰かが私を助けることができるなら、これが私のコードです!

    RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[UserObject class]];
    [mapping mapKeyPath:@"id" toAttribute:@"id"];
    [mapping mapKeyPath:@"token_session" toAttribute:@"token_session"];
    [mapping mapKeyPath:@"notification" toAttribute:@"notification"];

    [[RKObjectManager sharedManager].mappingProvider setMapping:mapping forKeyPath:@"user"];
    [[RKObjectManager sharedManager].mappingProvider registerMapping:mapping withRootKeyPath:@"user"];
    [[RKObjectManager sharedManager].mappingProvider setSerializationMapping:[mapping inverseMapping] forClass:[UserObject class]];
//Route :
    [[RKObjectManager sharedManager].router routeClass:[UserObject class] toResourcePath:@"user"];

そして、オブジェクトの投稿:

RKObjectManager * manager = [RKObjectManager sharedManager];
[manager postObject:user usingBlock:^(RKObjectLoader* loader)
{
    loader.delegate = self;
}];

どうもありがとう。

編集 :

私はこれを試しました:

RKObjectManager * manager = [RKObjectManager sharedManager];
    [manager postObject:[CurrentSession sharedInstance].user usingBlock:^(RKObjectLoader* loader)
    {
        loader.sourceObject = [NSDictionary dictionaryWithObject:[CurrentSession sharedInstance].user forKey:@"user"];
        loader.resourcePath = url;
        loader.delegate = self;
    }];

しかし、JSONなので送信は空です:(

4

1 に答える 1

1

間違いを見つけました!

[[RKObjectManager sharedManager].mappingProvider setMapping:mapping forKeyPath:@"user"];
[[RKObjectManager sharedManager].mappingProvider registerMapping:mapping withRootKeyPath:@"user"];

RestKitはこれらの両方の行が好きではないようです。最初の行だけを保持し、送信JSONが期待どおりになりました

{"user":{"id":98,"notification":false,"id":98,"token_session":"506934689"}}
于 2012-10-16T08:48:22.677 に答える