私はJSONを非常にうまく解析していましたが、私のサーバーはちょうど私に変わってしまいました。私のJSONは、このように見えるように使用:RestKit複雑なオブジェクトの配列を使ったマッピング
{
"blobs": [
{
"createdOn": "2012-03-16T15:13:12.551Z",
"description": "Fake description",
"hint": "And a useless hint",
"id": 400,
"name": "Fake CA one",
"publicId": "FF6",
"type": 0
},
{
"createdOn": "2012-03-16T17:33:48.514Z",
"description": "No hint on this one, but it does have a description.",
"hint": "Hint",
"id": 402,
"name": "Second fake one in CA",
"publicId": "FF8",
"type": 0
}
]
}
と私のマッピングは、このように見えた。だから私は追加
{
"blobsList": {
"blobs": [
{
"createdOn" :"2012-03-16T15:13:12.551Z",
"description": "Fake description",
"hint": "And a useless hint",
"id": 400,
"name": "Fake CA one",
"publicId": "FF6",
"type": 0
},
{
"createdOn": "2012-03-16T17:33:48.514Z",
"description": "No hint on this one, but it does have a description.",
"hint": "Hint",
"id": 402,
"name": "Second fake one in CA",
"publicId": "FF8",
"type": 0
}
]
}
}
:
RKObjectMapping* blobMapping = [RKObjectMapping mappingForClass:[GetResponseInRegionResponse class]];
[blobMapping mapKeyPath:@"name" toAttribute:@"name"];
[blobMapping mapKeyPath:@"id" toAttribute:@"blobId"];
[blobMapping mapKeyPath:@"description" toAttribute:@"description"];
[blobMapping mapKeyPath:@"hint" toAttribute:@"hint"];
[[RKObjectManager sharedManager].mappingProvider setMapping:blobMapping forKeyPath:@"blobs"];
今、私のサーバーが変更されたと、私はこれを取り戻しますこれは私のマッピングに:
RKObjectMapping* blobsListMapping = [RKObjectMapping mappingForClass:[GetResponseInRegionResponseList class]];
[blobsListMapping mapKeyPath:@"blobsList" toAttribute:@"blobsList"];
[[RKObjectManager sharedManager].mappingProvider setMapping:blobsListMapping forKeyPath:@"blobsList"];
とされているが、私のクラスです:私はこのJSONをパースするとき
@interface GetResponseInRegionResponse : NSObject
{
NSString* name;
NSString* blobId;
NSString* description;
NSString* hint;
}
@interface GetResponseInRegionResponseList : NSObject
{
NSArray *blobsList;
}
は、私はそれらの両方がJKDictionaryオブジェクトで、その中の2つのオブジェクトのJKArrayを持っている一つのオブジェクトを取得します。明らかにそれは私のデータですが、JKDictionary形式です。それはGetResponseInRegionResponseクラスに決してマップされませんでした!
githubドキュメントを読むことで、配列のtoRelationshipメソッドを使用したいと思うようですが、どこに配置するのか分かりません。私は「記事」の例に従うと、これをしようとした場合:
[blobListMapping mapKeyPath:@"blobs" toAttribute:@"blobsList"];
[blobListMapping mapKeyPath:@"blobs" toRelationship:@"blobsList" withMapping:blobMapping];
を、私はこの例外を取得:
2012-03-19 14:59:53.704 Ferret[8933:16303] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unable to add mapping for keyPath blobsList, one already exists...'
それでは、どのように私は私のJSON内の複雑なオブジェクトの配列をマッピングすることができますか?
何か助けていただきありがとうございます。ありがとう!
を、私は私が得ることを行うと:. - ***キャッチされていない例外 'NSUnknownKeyException'、理由: '[ valueForUndefinedKey:]:このクラスはキーIDに対応するキー値ではありません。 –
ああ、それは私の間違いでした。JSONには "id"というタグが付けられていて、 "id"ではなく "blobId"という名前のクラスメンバーがありました。しかし、私もtoRelationshipの部分を持っていなければなりませんでした。私はRestKitのメーリングリストを外しました。その人が問題のその部分でここにチャインムするなら、私はあなたの2人の間で恩恵を分けることができるかどうかを見ます。どうもありがとうございます! –
あなたのJSONの設定方法はあなたの関係を必要としません。 _object_ "blobsList"の中には、別の_object_ "blobs"が直接存在し、そこには配列しかありません。 "blobList"は実際にあなたの例に似ていれば決して配列を含むことはありません。 – k1th