Câu trả lời ngắn: Đảm bảo bạn đang chạy phiên bản mới nhất AFNetworking. Đó là tất cả những gì tôi có thể xem là vấn đề dựa trên mã bạn đã cung cấp.
Câu trả lời dài: Tôi đã cố gắng sao chép sự cố bạn đang mô tả bằng các phiên bản mới nhất của AFNetworking và tôi không thể. Tôi đào sâu vào AFNetworking để xem cách mã hóa JSON được thực hiện. AFHTTPClient.m:442 sử dụng NSJSONSerialization để mã hóa các yêu cầu JSON. Tôi đã đưa ra đoạn mã sau để kiểm tra vấn đề này:
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]);
kết quả đầu ra:
{"value":true}
Vì vậy @YES
nên làm nó. Lưu ý, hãy chắc chắn không phải để sử dụng @(YES)
trong mã của bạn vì nó sẽ xuất ra dưới dạng 1
thay vì true
.
NSError* error = nil;
NSData* jsonData = [NSJSONSerialization dataWithJSONObject:@{@"value" : @(YES)} options:0 error:&error];
NSLog(@"JSON:%@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
kết quả đầu ra:
{"value":1}
Với mà tôi đã trải qua và cố gắng tìm ra cách AFHTTPClient cần phải được cấu hình để gửi ra một bool như 1
/0
thay vì true
/false
và không thể tìm thấy bất kì. Đây là mã mạng của tôi.
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];
Nguồn
2012-12-24 18:19:06
Vì @YES là một NSNumber, NSJSONSerialization biến điều này thành 0/1. Tôi không nghĩ rằng có một cách khác hơn @ {@ "giá trị": (yesOrNo? @ "True": @ "false")} hoặc sử dụng một lớp tuần tự khác. –
@TalBereznitskey Có vẻ như việc triển khai máy chủ của tôi đang chờ xử lý boolean độc đáo với giá trị chuỗi là "true"/"false"! Nếu bạn dán nó như là một câu trả lời tôi sẽ chấp nhận nó :) – abyx