2012-09-13 3 views
0

RestKit GET 중에 (예상) nil keypath를 정상적으로 처리하려면 어떻게합니까?RestKit - null 값/빈 배열을 사용하여 JSON 응답을 매핑하십시오.

사용자에게 이벤트가없는 경우 getAllEvents API 호출을하면 API는 페이로드에 null 값을 반환합니다. {"events":null}. null 값을 사용하면 RestKit request: didFailLoadWithErrorobjectLoader: didFailWithError 메서드가 호출됩니다.이 메서드는 0 이벤트가있을 때 예상되는 동작이므로 꼭 필요하지는 않습니다. 오류 메시지는 Could not find an object mapping for keyPath: ''입니다.

매핑 구성 및/또는 대리자 메소드에서이 문제를 처리 할 수 ​​있습니까, 아니면 null 대신 빈 문자열을 반환하도록 API를 수정해야 할 수 있습니까? 목록이 비어있을 때 JSON이 반환해야하는 표준이 있습니까?

답변

2

목록이 비어있을 때 JSON이 반환해야하는 표준이 있습니까?

나는 actualy 모르겠지만, 하늘의 배열과 함께 가고 싶어요 : 값이 null

{ 'events' : [] } 

, 난 그냥 전혀 [대역폭을 절약] 보낼 것입니다.

편집 : see this answer too.

1

업데이트 : RestKit v0.10.x 이상에서는 더 이상 작동하지 않습니다. @ moonwave99의 대답을 참조하십시오.

해결책을 찾았습니다!

나는 지금 nullwave 객체를 빈 배열로 변경한다는 점을 제외하고는 moonwave의 제안과 매우 유사한 것을 수행하게되었습니다.

- (void)objectLoader:(RKObjectLoader*)loader willMapData:(inout id *)mappableData { 

    id events = [*mappableData objectForKey:@"events"]; 

    if (events == [NSNull null]) { 
    NSLog(@"it's null"); 
    [*mappableData setObject:@"" forKey:@"events"]; 
    } 
} 

null이 아닌 빈 배열을 성공적으로 처리하려면 이벤트 매핑에 알 수없는 키 경로를 무시하도록해야했습니다. 대신 didFailWithError의 대리자 메서드를 호출 이제

[eventsMapping setIgnoreUnknownKeyPaths:YES]; 

는 RestKit는 내가 기대했던 것처럼/모두 함께 희망 didLoadObjects를 호출합니다. 거기서 내 기본 Cocoa 객체에 할당하기 전에 배열이 비어 있는지 확인할 수 있습니다.

- (void)objectLoader:(RKObjectLoader*)objectLoader didLoadObjects:(NSArray*)objects { 

    if ([objects count] == 0) { 

    // No events, alert user 

    } 
    else if ([[objects objectAtIndex:0] isKindOfClass:[Events class]]) { 

    Events *events = [objects objectAtIndex:0]; 

} 
관련 문제