0

私のJSONの構造は次のとおりです。

{
"<Person>k__BackingField" =     {
    "_email" = "name@domain.com";
    "_emailUpdate" = 1;
    "_firstName" = "First";
    "_lastName" = "Last";
};
"<SharedKey>k__BackingField" = "some-long-random-string";
}

この人としてログインするためにrestkitを使用しています。投稿を作成し、その応答を正しく取得します。私のマッピングは次のように設定されています。

+(void)ConfigureAPI
{
[super ConfigureAPI];
// Initialize RestKit
[RKObjectManager managerWithBaseURLString: @"www.api_root.com/";
Class<RKParser> parser = [[RKParserRegistry sharedRegistry] parserClassForMIMEType:@"application/json"];
[[RKParserRegistry sharedRegistry] setParserClass:parser forMIMEType:@"text/plain"];

RKObjectMapping *mapping;

// Person
mapping = [RKObjectMapping mappingForClass:[Person class]];
[mapping mapKeyPath:@"_email" toAttribute:@"email"];
[mapping mapKeyPath:@"_emailUpdate" toAttribute:@"emailUpdate"];
[mapping mapKeyPath:@"_firstName" toAttribute:@"firstName"];
[mapping mapKeyPath:@"_lastName" toAttribute:@"lastName"];
[[RKObjectManager sharedManager].mappingProvider setMapping:mapping forKeyPath:@"<Person>k__BackingField"];
}

アプリケーションを実行してJSON応答を取得する関数を呼び出すと、次のエラーが発生します。

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<__NSCFString 0x7b41800> valueForUndefinedKey:]: this class is not key value coding-compliant for the key <Person>k__BackingField.'

なぜ私がこれを手に入れているのか誰か知っていますか?すべてが正しく設定されているようです

編集

それが役立つ場合は、これが私が応答を処理する方法です:

    // when you get the response...
    request.onDidLoadResponse = ^(RKResponse *response){
        RKObjectMapper *mapper = [RKObjectMapper mapperWithObject:[response bodyAsString] mappingProvider:[RKObjectManager sharedManager].mappingProvider];

        Person *person = nil;
        RKObjectMappingResult *mappingResult = [mapper performMapping];
        person = [mappingResult asObject];
    };
4

1 に答える 1

1

応答文字列を RKObjectMapper に渡す前に JSON オブジェクトに変換していません。応答しない応答の文字列値を渡していましたが、これvalueForKey:は取得していた例外を説明しています。次のように簡単にオブジェクトに変換できます。

request.onDidLoadResponse = ^(RKResponse *response){

    NSError *error;
    id jsonObject = [response parsedBody:&error];

    if(error)
        NSLog(@"Error parsing JSON: %@", error.localizedDescription);
    else {
        RKObjectMapper *mapper = [RKObjectMapper mapperWithObject:jsonObject mappingProvider:[RKObjectManager sharedManager].mappingProvider];

        Person *person = nil;
        RKObjectMappingResult *mappingResult = [mapper performMapping];
        person = [mappingResult asObject];
    }
};
于 2012-10-11T16:05:49.233 に答える