Krótka odpowiedź: Upewnij się, że używasz najnowszej wersji AFNetworking. To wszystko, co widzę jako problem oparty na podanym przez ciebie kodzie.
Długa odpowiedź: Próbowałem odtworzenie problemu jesteś opisujący z najnowszymi wersjami AFNetworking i nie mogłem. Wkopałem się w AFNetworking, aby zobaczyć, jak przebiega kodowanie JSON. AFHTTPClient.m:442 używa NSJSONSerialization do kodowania żądań JSON. Wpadłem na następujący kod do testowania problem:
NSError* error = nil;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:@{@"value" : @YES} options:0 error:&error];
NSLog(@"Resulting JSON:\n\n%@\n", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
Wyjścia:
{"value":true}
Więc @YES
powinno wystarczyć. Pamiętaj, aby upewnić się, że nie użyje w swoim kodzie @(YES)
, ponieważ będzie wyprowadzać jako 1
zamiast true
.
NSError* error = nil;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:@{@"value" : @(YES)} options:0 error:&error];
NSLog(@"JSON:%@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
wyjścia:
{"value":1}
Mając to przeszedłem, próbując dowiedzieć się, jak AFHTTPClient muszą być skonfigurowane do wysyłania bool jako 1
/0
zamiast true
/false
i nie mógł znaleźć każdy. Oto mój kod sieciowy.
AFHTTPClient* httpClient = [[AFHTTPClient alloc] initWithBaseURL:[NSURL URLWithString:@"http://<SERVER HERE>"]];
[httpClient setParameterEncoding:AFJSONParameterEncoding];
NSMutableURLRequest *jsonRequest = [httpClient requestWithMethod:@"POST" path:@"/" parameters:@{@"value": @YES}];
AFHTTPRequestOperation *jsonOperation = [AFJSONRequestOperation JSONRequestOperationWithRequest:jsonRequest success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
NSLog(@"Success");
} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
NSLog(@"Failure");
}];
[jsonOperation start];
Ponieważ @YES jest NSNumber, NSJSONSerialization zamienia to na 0/1. Nie sądzę, że istnieje sposób inny niż @ {@ "value": (yesOrNo? @ "True": @ "false")} lub użycie innej klasy serializacji. –
@TalBereznitskey Wygląda na to, że mój serwer implementacji oczekuje, że boolean będzie ładnie traktował ciąg znaków "true"/"false"! Jeśli wkleisz to jako odpowiedź, zaakceptuję to :) – abyx