5

JSON配列をRestKitにマッピングする際に問題があります。JSON ファイルは次のようになります。

{"issuelist":[
    {
        "issue":[
            {
                "id":1,
                "beschreibung":"",
                "name":"Test1"
            },
            {
                "id":2,
                "beschreibung":"",
                "name":"Test2"
            }
        ]
    }
]}

「問題」の配列に興味があります。これは、1 つの問題に対する私のマッピングです。

RKObjectMapping *objectMapping = [RKObjectMapping mappingForClass:[self class] usingBlock:^(RKObjectMapping *mapping) {
        [mapping mapAttributes:@"name", @"beschreibung", nil];
        [mapping mapKeyPathsToAttributes:
                @"id", @"identifier",
                nil];
    }];

そして、これがObjectMappingのセットアップ方法です

RKObjectMappingProvider *omp = [RKObjectManager sharedManager].mappingProvider;

RKObjectMapping *issueMapping = [Issue mapping];
[omp addObjectMapping:issueMapping];

[omp setObjectMapping:issueMapping forKeyPath:@"issuelist.issue"];

残念ながら、これは機能しません。次のようなログ出力が得られます。

    T restkit.object_mapping:RKObjectMappingOperation.m:152 keyPath 'name' で変換可能な値が見つかりました。タイプ「__NSArrayI」から「NSString」への変換
    W restkit.object_mapping:RKObjectMappingOperation.m:232 keyPath 'name' で値の変換に失敗しました。「__NSArrayI」から「NSString」への変換方法がない
    T restkit.object_mapping:RKObjectMappingOperation.m:339 keyPath 'name から keyPath 'name' への属性値のマッピングをスキップしました -- 値は変更されていません ((null))
    T restkit.object_mapping:RKObjectMappingOperation.m:322 属性値 keyPath 'beschreibung' を 'beschreibung' にマッピングします
    T restkit.object_mapping:RKObjectMappingOperation.m:152 keyPath 'beschreibung' で変換可能な値が見つかりました。タイプ「__NSArrayI」から「NSString」への変換
    W restkit.object_mapping:RKObjectMappingOperation.m:232 keyPath 'beschreibung' で値の変換に失敗しました。「__NSArrayI」から「NSString」への変換方法がない
    T restkit.object_mapping:RKObjectMappingOperation.m:339 keyPath 'beschreibung から keyPath 'beschreibung' への属性値のマッピングをスキップしました -- 値は変更されていません ((null))
    T restkit.object_mapping:RKObjectMappingOperation.m:322 属性値 keyPath 'id' を 'identifier' にマッピングします
    T restkit.object_mapping:RKObjectMappingOperation.m:152 keyPath 'id' で変換可能な値が見つかりました。タイプ「__NSArrayI」から「NSString」への変換
    W restkit.object_mapping:RKObjectMappingOperation.m:232 keyPath 'id' で値の変換に失敗しました。「__NSArrayI」から「NSString」への変換方法がない
    T restkit.object_mapping:RKObjectMappingOperation.m:339 keyPath 'id から keyPath 'identifier' への属性値のマッピングをスキップしました -- 値は変更されていません ((null))
    D restkit.object_mapping:RKObjectMappingOperation.m:624 マッピング操作が正常に完了しました...

RestKit は、問題の配列を作成するのではなく、アレイ全体を 1 つの問題にマップしようとしているようです。これを修正するには、マッピングをどのように変更する必要がありますか?

ご協力いただきありがとうございます!

4

1 に答える 1

9

これを試して:

RKObjectMapping* issueMapping = [RKObjectMapping mappingForClass: [Issue class] usingBlock:^(RKObjectMapping *mapping) {
    [mapping mapAttributes:@"name", @"beschreibung", nil];
    [mapping mapKeyPathsToAttributes:
     @"id", @"identifier",
     nil];
}];
issueMapping.rootKeyPath = @"issue";
[omp setObjectMaping: issueMapping forKeyPath: @"issuelist"];

これは、issuelist のキーパスが検出されたときに issueMapping を使用することを意味します。そして、すべてのルート課題に対して、Issue オブジェクトを作成します。

于 2012-06-22T08:18:28.993 に答える