2016-08-24 14 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として値をシリアル化するために使用できますか?また

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: このソリューションは、GET HEADおよびDELETEを除くすべてのメソッドを持つ要求に対して動作します。これらのメソッドは、元のシリアライゼーションを引き続きトリガーします。真/偽ではなく、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