似乎无法通过NSURLConnection从POST获得响应

时间:2014-02-23 16:38:41

标签: ios objective-c nsurlconnection nsurl nsurlrequest

我有搜索并且找不到合适的答案,但我有这个代码将数据发布到我的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。

谢谢,

彼得

1 个答案:

答案 0 :(得分:1)

使用initWithRequest:delegate: NSURLConnection启动异步下载,因此会立即返回并立即执行。

response始终为nil,因为您只是定义了它,然后在没有将其设置为任何内容的情况下将其记录下来。这需要在connection:didReceiveResponse:委托方法中完成。

if(conn){的位置,conn现有并不意味着连接成功,只是意味着可以创建连接(基本上,您没有提供无效请求)。你不知道它是否会起作用。

NSURLConnectionDelegate_Protocol(和NSURLConnectionDataDelegate)实施委托方法,以获取对响应和下载数据的访问权限(当它可用时)。