0

我正在创建一个 iPhone 应用程序,我需要将数据发送到服务器。使用 NSURLConnection 我可以发送数据,但我的数据被发送了两次。而且我只收到一次回复。谁能建议为什么会这样

这是我的代码

 NSURL *url=[NSURL URLWithString:[APIServiceURL geturl]];
        NSMutableURLRequest *req=[NSMutableURLRequest requestWithURL:url];
        NSString *msgLength=[NSString stringWithFormat:@"%d",[soapMsg1 length]];
        [req addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
        [req addValue:msgLength forHTTPHeaderField:@"Content-Length"];
        [req addValue:@"http://tempuri.org/InsertPostComment" forHTTPHeaderField:@"SOAPAction"];
        [req setHTTPMethod:@"POST"];
        [req setHTTPBody:[soapMsg1 dataUsingEncoding:NSUTF8StringEncoding]];

        // Response
        NSHTTPURLResponse *urlResponse=nil;
        NSError *error;
        connection =nil;
        connection=[[NSURLConnection alloc]initWithRequest:req delegate:self];
        NSData  *responseData;
        ;

        if (connection)
        {
            responseData=[NSURLConnection sendSynchronousRequest:req returningResponse:&urlResponse error:&error];
        }
        else
        {
            NSLog(@"not connected to server");
        }

        if ([responseData length]>0)
        {

            NSString *responseString=[[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding];
            NSLog(@"responseString %@",responseString);
            responseString =nil;}

谢谢

4

2 回答 2

2

使用您的代码 2 请求。

第一个是在您创建 NSURLConnection 时发送的。创建连接并异步启动请求,将[[NSURLConnection alloc] initWitRequest: delegate:]数据发送回您指定的委托。

第二个是你打电话的时候做的

[NSURLConnection sendSynchronousRequest:req returningResponse:&urlResponse error:&error];

如果要对端点进行同步调用:

NSData  *responseData;
responseData=[NSURLConnection sendSynchronousRequest:req returningResponse:&urlResponse error:&error];

if (!error)
{
    // Do your stuff with the response data
}
else
{
    NSLog(@"not connected to server with error %@", error.debugDescription);
}

URLConnection 的好读物:Apple Reference

于 2013-08-27T07:24:20.250 回答
0

使用 NSUrlConnection 委托来取回两个响应。当且仅当您的服务器在您发布的日期发送 2 个响应时,您才能获得 2 个响应。

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSString *response = [[NSString alloc] initWithBytes:[data bytes] length:[data length]
                                                     encoding:NSUTF8StringEncoding];
}

它应该工作。

于 2013-08-27T07:24:35.100 回答