저는 ios/RESTKIT를 처음 사용합니다. 내가 RESTKIT를 사용하여 ios 장치에서 webservice를 소비하려고합니다. json 수익은 2 가지 가능한 결과를 가질 수 있습니다. . 실패에IOS - RESTKIT - 여러 방식으로 결과 매핑
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입니다.
(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)에 대한
{
status: true,
result: {
name: "Some User",
tasks: [
{
name: "Some Task1",
taskId: 10
},
{
name: "Some Task2",
taskId: 20
}
]
},
error: null
}
매핑 괜찮 작동한다. (B)는 그렇지 않습니다. 당신은 약간의 포인터를 제공 할 수 있습니까?
2) 동일한 webservice 호출의 경우 "result"부분은 문자열 (null) 또는 복합 객체 일 수 있습니다. 그렇다면이 코드를 어떻게 처리해야합니까? 어떤 매핑을 통과합니까? 매핑 또는 cmplxMapng (horozontal 스크롤을 피하기 위해 이름이 변경 되었습니까?)
[RKObjectManager sharedManager] loadObjectsAtResourcePath @ "/ myURL이"
objectMapping : HOW_TO_DECIDE_WHICH_MAPPING_TO_PASS_HERE 대리인 : 자기];
저는 이것이 일반적인 시나리오라고 생각합니다. 검색했지만 관련 예제를 찾을 수 없습니다. 어쩌면 내가 잘못된 곳을 들여다 보았을지도 모른다. 이것에 접근하는 방법에 관한 생각/조언이 도움이 될 것입니다. 감사. (통지 forKeyPath)
[objectManager.mappingProvider setMapping:uooMapping forKeyPath:@"result.tasks"];
2)이와
[objectManager.mappingProvider setMapping:taskMapping forKeyPath:@"tasks"];
:
1)
내가이 줄을 교체 -
내 답변이 도움이되는지 알려 주시고, 유용하다고 판단되면 동의 해 주시기 바랍니다. – john
이 질문은 아직 공개 된 상태입니다. 모든 포인터가 도움이 될 것입니다. 감사! – Ravi