私は ios/RESTKIT が初めてです。RESTKIT を使用して iOS デバイスから Web サービスを利用しようとしています。json の戻り値には、2 つの結果が考えられます。
A)失敗すると、 jsonの結果は次のようになります (結果は文字列 "null" です。エラー コードは利用可能です)。
{
status: false,
result: null
error: NO_SUCH_USER
}
(A) のマッピング
RKObjectMapping* mapping = [RKObjectMapping mappingForClass:[WsReturn class]];
[mapping mapKeyPath:@"result" toAttribute:@"result"];
[mapping mapKeyPath:@"status" toAttribute:@"status"];
[mapping mapKeyPath:@"error" toAttribute:@"error"];
[objectManager.mappingProvider setMapping:mapping forKeyPath:@"/"];
B)成功すると、次のようになります (結果は「複雑なオブジェクト」です。エラー コードは null です):
{
status: true,
result: {
name: "Some User",
tasks: [
{
name: "Some Task1",
taskId: 10
},
{
name: "Some Task2",
taskId: 20
}
]
},
error: null
}
(B) のマッピング
RKObjectMapping* taskMapping = [RKObjectMapping mappingForClass:[Task class]];
[taskMapping mapKeyPath:@"name" toAttribute:@"name"];
[taskMapping mapKeyPath:@"taskId" toAttribute:@"taskId"];
[objectManager.mappingProvider setMapping:taskMapping forKeyPath:@"tasks"];
RKObjectMapping* resultMapping = [RKObjectMapping mappingForClass:[Result class]];
[resultMapping mapKeyPath:@"name" toAttribute:@"name"];
[resultMapping mapRelationship:@"tasks" withMapping:taskMapping];
[objectManager.mappingProvider setMapping:resultMapping forKeyPath:@"result"];
RKObjectMapping* cmplxMapng = [RKObjectMapping mappingForClass:[WsReturn class]];
[cmplxMapng mapKeyPath:@"status" toAttribute:@"status"];
[cmplxMapng mapKeyPath:@"error" toAttribute:@"error"];
[cmplxMapng mapRelationship:@"result" withMapping:resultMapping];
[objectManager.mappingProvider setMapping:cmplxMapng forKeyPath:@"/"];
質問
1) (A) 正常に動作します。(B) しません。いくつかの指針を提供できますか?
2) 同じ Web サービス呼び出しの場合、「結果」部分は文字列 (null) または複雑なオブジェクトである可能性があります。では、これをコードでどのように処理すればよいでしょうか。どのマッピングを渡しますか? マッピングまたは cmplxMapng (横スクロールを避けるために名前が変更されました)?
[[RKObjectManager sharedManager] loadObjectsAtResourcePath:@"/myUrl"
objectMapping: HOW_TO_DECIDE_WHICH_MAPPING_TO_PASS_HERE delegate:self];
これは一般的なシナリオだと思います。検索しましたが、関連する例は見つかりませんでした。多分私は間違った場所を見ました。これにアプローチする方法についての考え/指針が役立ちます。ありがとう。