我已经成功创建了一个方法,它连接到我的Web服务并且POSTS一个字符串并接收一个字符串响应。但是,我现在尝试POST一个使用NSJSONSerialization创建的JSON字典。但是,Xcode给了我一个错误。我试图转换我的初始代码。以下相关行......
NSData* loginDataJSON = [NSJSONSerialization dataWithJSONObject:loginDataDictionary options:NSJSONWritingPrettyPrinted error:&error];
[request setValue:loginDataJSON forHTTPHeaderField:@"loginDataJSON"];
[request setHTTPBody:[loginDataJSON dataUsingEncoding:NSUTF8StringEncoding]];
第二行继承人抱怨我正在使用需要NSString的NSData。
第三行抱怨loginDataJSON
可能无法回复dataUsingEnconding
我似乎强迫一个NSData对象(因为那是NSJSONSerialization给我的)无法使用的地方。我最好尝试将JSON转换为与现有请求代码一起使用的字符串,还是应该/我可以更改我的请求代码以接受NSData而不是NSString吗?
答案 0 :(得分:1)
尝试以下代码:
let body = NSMutableDictionary()
body.setValue("myString" forKey: "stringType")
body.setValue(data?.base64EncodedString(options: .lineLength64Characters) forKey: "dataType")
这样,您可以在字典中同时包含数据和字符串。这里的'data?.base64EncodedString(options: .lineLength64Characters)'
返回带有base64编码的字符串。因此,您的字典仅包含字符串,并且在服务器端,您必须将其转换回数据。
希望它可以解决您的问题。
答案 1 :(得分:0)
您是否尝试过使用JSONKit或RESTKit等框架? RESTKit专门用于与JSON进行Web服务通信,并在内部使用JSONKit和另一个解析器。我认为这将解决您的问题,也许是未来的问题;)
答案 2 :(得分:0)
发出可变请求
[request setHTTPBodyWithString:myMessageJSON];
其中方法如下:
- (void)setHTTPBodyWithString:(NSString *)body {
NSData *bodyData = [body dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
[self setValue:[NSString stringWithFormat:@"%d", [bodyData length]] forHTTPHeaderField:@"Content-Length"];
[self setHTTPBody:bodyData];
}
答案 3 :(得分:0)
您需要将JSON作为请求的正文发送,并可能设置内容类型和内容长度:
NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:nil];
[request setValue:@"application/json" forHTTPHeaderField:@"content-type"];
[request setValue:[NSString stringWithFormat:@"%d", [loginDataJSON length]] forHTTPHeaderField:@"content-length"];
[request setHTTPBody:loginDataJSON];