2014-06-10 5 views
5

를 사용하여 JSON 직렬화 때이 클래스가 속성 전무 무시 : 두 속성은 선택 사항 널 (NULL) 부울 값을 나타냅니다RestKit

@interface MovieStatus : NSObject 
@property (nonatomic, strong) NSNumber* seen; 
@property (nonatomic, strong) NSNumber* watchlist; 
@end 

합니다. RKObjectManager을 통해 RestKit을 사용하여이 개체를 서버로 보내고 적절한 매핑을 만들었습니다. 하지만 개체를 ​​serialize 할 때 POST 데이터에서 속성을 건너 뛸 수 없습니다. 예를 들어

,이 코드 : 내가 좋아하는 것

{ 
    "seen": true, 
    "watchlist": null 
} 

을 보낼 :

RKLogConfigureByName("*", RKLogLevelTrace); 

RKObjectManager* manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://www.example.com/v1"]]; 
manager.requestSerializationMIMEType = RKMIMETypeJSON; 

RKObjectMapping* requestMapping = [RKObjectMapping requestMapping]; 
[requestMapping addAttributeMappingsFromArray:@[@"seen", @"watchlist"]]; 

RKRequestDescriptor* requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[MovieStatus class] rootKeyPath:nil method:RKRequestMethodPOST]; 
[manager addRequestDescriptor:requestDescriptor]; 

RKRoute* route = [RKRoute routeWithClass:[MovieStatus class] pathPattern:@"status" method:RKRequestMethodPOST]; 
[manager.router.routeSet addRoute:route]; 


MovieStatus* status = [[MovieStatus alloc] init]; 
status.seen = @(YES); 
[manager postObject:status path:nil parameters:nil success:nil failure:nil]; 

JSON을 보내는

{ 
    "seen": true 
} 

사람이 어떻게 저를 지적 할 수 나는 그것을 얻을 수 있습니까?

답변

9

나는 NO에 매핑의 assignsDefaultValueForMissingAttributes를 설정하여 그것을 해결 :

requestMapping.assignsDefaultValueForMissingAttributes = NO; 

는 이제 JSON 요청이 null 값을 포함하지 않습니다.

+1

각 매핑에 대해 개별적으로 설정하는 대신 전역으로 설정하는 방법이 있습니까? – dirkoneill

+0

당신은 RKObjectMapping 서브 클래스가 될 수 있습니다. – VaporwareWolf

+1

이것은 저에게 효과적이지 않았고, 이것이 디폴트로 '아니오'로 설정되었다고 생각했습니다. http://stackoverflow.com/questions/31846262/how-do-i-ignore-empty-properties-on-posted-objects-using-restkit에 새 질문을 올렸습니다. – Tim