我有搜索并且找不到合适的答案,但我有这个代码将数据发布到我的Web服务器,我试图获取HTTP响应,但响应一直返回(null) 。我可以确认连接成功,因为if语句(见下文)执行适当的代码。
这是我的代码:
-(void)submitAction{
NSString *post = [NSString stringWithFormat:@"&var1=%@&var2=%@&var3=%@&var4=%@",
_var1, _var2, _var3, _var4];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d",[postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://my-web-server.com/path-to-web-service/"]]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];
[request setHTTPBody:postData];
NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
NSURLResponse *response;
NSLog(@"%@", response); // Always returns null :(
if(conn){
NSLog(@"Connection Successful."); // Connection is successful in my tests.
}else{
NSLog(@"Connection could not be made");
}
}
这是在我的.h文件中实现的NSURLConnectionDelegate委托:
@interface AddTaskViewController : UIViewController <UITextFieldDelegate, UIPickerViewDelegate, NSURLConnectionDelegate>
谁能看到我在这里做错了什么?服务器应该返回一个JSON字符串,(当我通过浏览器测试Web服务时它会这样做)但NSURLResponse一直是null。
谢谢,
彼得
答案 0 :(得分:1)
使用initWithRequest:delegate:
NSURLConnection
启动异步下载,因此会立即返回并立即执行。
response
始终为nil
,因为您只是定义了它,然后在没有将其设置为任何内容的情况下将其记录下来。这需要在connection:didReceiveResponse:
委托方法中完成。
您if(conn){
的位置,conn
现有并不意味着连接成功,只是意味着可以创建连接(基本上,您没有提供无效请求)。你不知道它是否会起作用。
从NSURLConnectionDelegate_Protocol
(和NSURLConnectionDataDelegate
)实施委托方法,以获取对响应和下载数据的访问权限(当它可用时)。