0

我已经成功创建了一个连接到我的web服务并发送一个字符串并接收字符串响应的方法。但是,我现在试图发布一个使用NSJSONSerialization创建的JSON字典。但是,Xcode给我一个错误。我试图转换我的初始代码。下面的相关行...如何通过NSURLConnection发送JSON数据

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

您是否尝试过使用JSONKit或RESTkit等框架? RESTkit特别用于与JSON进行webservice通信,并在内部使用JSONKit和另一个解析器。我认为这将解决您的问题,也许一些未来的一个;)

+0

不,我没有试过那些然而。我知道他们,但我通常更喜欢在可能的情况下使用内置的iOS方法。但是如果没有人能指出我正确的方向,我可能不得不转向REST。 –

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]; 
} 
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];