2013-07-09 2 views
0

위해 나는 WS에서이 같은 JSON 문서를 얻고있다. Restkit 동적 매핑은 선택적 속성

는 난 단지 오류를 읽기위한 동적 매핑을 추가 - 오류가로 설정되어있는 경우에만 진정한

중 하나 오류 = true의 경우

[dynamicMapping addMatcher:[RKObjectMappingMatcher matcherWithKeyPath:@"error" expectedValue:[NSNumber numberWithInt:1] objectMapping:errorMapping]]; 

또는

[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) { 
     if ([[representation valueForKey:@"error"] isEqualToNumber:[NSNumber numberWithInt:1]]) { 
      return errorMapping; 
     } 

     return nil; 
    }]; 

모든 것이 잘 작동 오류 속성이 누락 된 경우 경고 메시지가 표시됩니다.

restkit.object_mapping:RKMapperOperation.m:98 Adding mapping error: Could not find an object mapping for keyPath: '<null>' 

경고를 없애고 싶습니다. 이 문제의 모범 사례는 무엇입니까? 속성을 선택 사항로 표시하려면 어떻게합니까?

+0

이 매핑과 다른 매핑을 사용하고 있습니까? – Wain

+0

안녕하세요, 네, 상태 코드가 RKStatusCodeClassServerError = 500 인 서버 오류에 대해 동일한 매핑 ("errorMapping")을 사용합니다. 따라서 서버에서 오류가 발생하면 서버는 오류 메시지를 json 형식으로 보냅니다. – jeven

+0

성공 시나리오는 어떻게 처리됩니까? 일반적으로 동적 매핑은 상태를 확인한 다음 오류 매핑 또는 성공 매핑을 반환합니다. – Wain

답변

0

경고를 제거하려면 매핑 설정을 완료해야합니다. 현재는 절반의 시나리오에 대한 정보 만 제공하기 때문에 매핑 구성을 완료해야합니다. 경고는 바로 그 경고입니다. 의도 한 기능 일 수도 있습니다. 그래서 그것이 어설 션이 아닙니다.

그래서, 당신은 오류 상황을 처리하고, 단순히 다른 체크, 같은 추가 : 또한

[dynamicMapping setObjectMappingForRepresentationBlock:^RKObjectMapping *(id representation) { 
    NSNumber *errorNumber = [representation valueForKey:@"error"]; 

    if (errorNumber == nil) { 
     return successMapping; 
    } else if ([errorNumber isEqualToNumber:[NSNumber numberWithInt:1]]) { 
     return errorMapping; 
    } 

    return warningMapping; 
}]; 

을, 당신은 단지 '오류'매개 변수를 확인 국한되지 않습니다. 존재 여부와 가치 모두 응답의 다른 키와 값을 확인할 수 있습니다.

+0

문제는 내 성공 json이 다음과 같이 보일 수 있도록 키 경로 "people"에 대한 성공 매핑을 등록했다는 것입니다. {people : [..], error = false, ...} 따라서 오류 동적 매핑은 keypath nil – jeven