Ios Can';似乎没有收到来自帖子的回复

Ios Can';似乎没有收到来自帖子的回复,ios,objective-c,nsurlconnection,nsurl,nsurlrequest,Ios,Objective C,Nsurlconnection,Nsurl,Nsurlrequest,我四处搜索,找不到正确的答案,但是我有一段代码,它将数据发布到我的web服务器,我试图获取HTTP响应,但响应不断返回(null)。我可以确认连接成功,因为if语句(见下文)执行了适当的代码 这是我的密码: -(void)submitAction{ NSString *post = [NSString stringWithFormat:@"&var1=%@&var2=%@&var3=%@&var4=%@", _v

我四处搜索,找不到正确的答案,但是我有一段代码,它将数据发布到我的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");
    }
}
以下是在my.h文件中实现的NSURLConnectionLegate委托:

@interface AddTaskViewController : UIViewController <UITextFieldDelegate, UIPickerViewDelegate, NSURLConnectionDelegate>
@interface AddTaskViewController:UIViewController
有人能看出我做错了什么吗?服务器应该返回一个JSON字符串(当我通过浏览器测试web服务时会返回),但NSURLRresponse始终为空

谢谢


Peter

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

response
始终为
nil
,因为您刚刚定义了它,然后记录了它,但从未将其设置为任何值。这需要在
连接:didReceiveResponse:
委托方法中完成

如果您执行
if(conn){
,那么
conn
的存在并不意味着连接成功,它只是意味着可以创建连接(基本上,您没有提供无效的请求)。您还不知道它是否会工作


实现来自(和)的委托方法以访问响应和下载的数据(当数据可用时).

您必须实现协议。阅读有关委派的内容。我的.h文件中已经实现了此委派。请稍候,我将更新我的代码。您不能在.h文件中实现任何内容。您在.m文件中实现委派。再次,阅读以了解委派是什么以及如何使用它。顺便说一句,您的帖子正文在开始时有额外的
&
。Second,而不是使用
dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES
您应该对单个值使用
CFURLCreateStringByAddingPercentEscapes
,如末尾所示。