2016-08-24 8 views
0

RestKit 버전에 대한 거짓으로 직렬화 : 0.27.0부울 값이 참/x-www-form-urlencoded를

RestKit는 x 축에있는 NSDictionary에 저장되어있는 부울 값을 직렬화 할 수 있도록하는 방법을 방법이 있나요 www-form-urlencoded 매개 변수? 내가 NSDictionary에 값을 채운

, 그것은 인코딩 된 문자열로 전달됩니다 :

product=ACCOUNT&rejected=1&type=NUMBER_OF_LOGINS_MONTH 

하지만 거부 매개 변수 값으로 거짓 대신 1 또는 0/진실해야합니다.

RKAttributeMapping의 propertyValueClass와 비슷한 클래스 사양을 사용하여 기본 유형 NSNumber를 재정의하는 방법이 있습니까? 또한 NSNumber는 내부적으로 __NSCFBoolean으로 구현됩니다. 이 정보를 사용하여 값을 true/false로 serialize 할 수 있습니까? 또한

static NSString * TSNRKAFQueryStringFromParametersWithEncoding(NSDictionary *parameters, NSStringEncoding stringEncoding) { 
     NSMutableArray *mutablePairs = [NSMutableArray array]; 
     for (TSNRKAFQueryStringPair *pair in TSNRKAFQueryStringPairsFromDictionary(parameters)) { 

      if([NSStringFromClass([pair.value class]) isEqualToString:@"__NSCFBoolean"]) { 

       pair.value = TSNNSCFBooleanToBooleanStringConvertor(pair.value); 
      } 

      [mutablePairs addObject:[pair URLEncodedStringValueWithEncoding:stringEncoding]]; 
     } 

     return [mutablePairs componentsJoinedByString:@"&"]; 
    } 

    NSString* TSNNSCFBooleanToBooleanStringConvertor(NSNumber* booleanInNSNumber) { 

     return [booleanInNSNumber boolValue] ? @"true" : @"false"; 
    } 

다른 방법/개체를 복사하고 이름을 기억

답변

1

와 문자열로 부울 NSNumber을 변환 할 수 있습니다 그렇지 않으면 연결될 때 충돌합니다.

새로운 서브 클래스는 RestKit에 등록해야합니다 :

[RKMIMETypeSerialization unregisterClass:[RKURLEncodedSerialization class]]; 
[RKMIMETypeSerialization registerClass:[TSNRKURLEncodedSerialization class] forMIMEType:RKMIMETypeFormURLEncoded]; 

UPDATE : 이 솔루션은, HEAD를 GET 및 DELETE를 제외한 모든 방법과 요청에 대해 작동합니다. 이러한 메서드는 여전히 원래의 serialization을 트리거합니다. true/false가 아니라 1/0입니다.

0

당신은 내가 RKURLEncodedSerialization을 서브 클래스 및 RKAFQueryStringFromParametersWithEncoding에서 구현을 복사 한

NSNumber *number = @YES; 
NSString *boolString = number.boolValue ? @"true" : @"false"; 
NSLog(@"%@", boolString); 
+0

바디 언. 문제는 내가 NSDictionary에서보다 다른 방법으로 restkit 엔진에서 부울을 전파 할 수 없다는 것입니다. 동시에 RK 코드를 변경하고 싶지 않습니다. 내 대답을 참조하십시오 http://stackoverflow.com/a/39120726/3389683 –

+0

'NSDictionary' 인스턴스에서는 사전의 모든 유형이 객체 여야하므로 원시 부울은 NSNumber로 표시되어야합니다. 또 다른 방법은 문자열을 사용하여 서버 측의 숫자/부울로 다시 변환하는 것입니다. – vadian