【问题标题】:NSURLRequest not being sent?NSURLRequest 没有被发送?
【发布时间】:2013-02-28 16:44:33
【问题描述】:

我有一个基于另一个 JSON 请求的响应发送到服务器的 JSON 请求,我使用此方法检查正在使用哪个 NSURL 连接来处理响应:

    if(connection == connection1) {
    // Connection 1
    } else if(connection == connection2) {
    // Connection 2
    }

它适用于第一个连接,它是这样发送的:

    NSString *jsonStr = [NSString stringWithFormat:@"https://api.flightstats.com/flex/flightstatus/rest/v2/json/flight/status/%@/%@/dep/%@?appId=%@&appKey=%@&utc=false",airline.text,flightnumber.text,datestring,flightAPIIDstring,flightAPIkeystring];
    NSURL *jsonurl = [NSURL URLWithString:jsonStr];
    flightTrackJSONconnectionrequest = [NSURLRequest requestWithURL:jsonurl];
    flighttrackJSONconnection =[[NSURLConnection alloc]
                                initWithRequest:flightTrackJSONconnectionrequest delegate:self];
    if(flighttrackJSONconnection){
    jsonresponse = [[NSMutableData alloc] init];
    } else {
    }

但是,在我的第一个连接(flighttrackJSONconnection)的 connectionDidFinishLoading 上,当我使用此代码时,根本没有发出第二个连接的请求:

    NSString *departjsonStr = [NSString stringWithFormat:@"https://api.flightstats.com/flex/airports/rest/v1/json/iata/%@?appId=%@&appKey=%@",DepartACode,flightAPIIDstring,flightAPIkeystring];
    NSURL *departjsonurl = [NSURL URLWithString:departjsonStr];
    departairportcheckJSONconnection = [NSURLRequest requestWithURL:departjsonurl];
    departairportcheckJSONconnection =[[NSURLConnection alloc]
                                           initWithRequest:departairportcheckJSONconnectionrequest delegate:self];
    if(departairportcheckJSONconnection){
    departairportlookup = [[NSMutableData alloc] init];
    } else {
    }

我将 NSLog 检查添加到连接 didFailWithError、连接 didReceiveResponse 和 connectionDidReciveData 中,发现唯一发出的 NSURL 请求是我的 flighttrackJSONconnection 请求...

所以我想知道,我是否遗漏了代码中的某些内容,或者在调用 connectionDidFinishLoading 时根本无法发送另一个 NSURLRequest?

对不起,如果我看起来像个菜鸟,我只是有点困惑......

此外,所有 JSON 解析代码(至少对于 flighttrackJSONresponse 连接)和这些代码在 connectionDidFinishLoading 上都可以正常工作,所以它不像我在声明任何内容时犯了错误,如果它有任何区别,我正在尝试发送 2 个请求在 connectionDidFinishLoading 上,它们每个都在 .h 上声明了自己的 NSURLConnection 和 NSURLRequest 名称,我对两者都有同样的问题。

感谢任何提示或想法的家伙..

【问题讨论】:

  • 您是否根据第一个 json 响应的参数发送第二个连接?
  • 是的,我做到了,这可能是什么问题?
  • 我发布了一个答案(作为建议)。看看吧!
  • 你确定你没有调用 [flighttrackJSONconnection start] 方法并且请求仍然进行吗?
  • 是的,唯一不起作用的是实际请求,我没有显示代码,但是在发送请求之前,它会从服务器中提取一个 API 密钥,我对其进行了测试并API 密钥被很好地提取,唯一的问题是它不想发送请求。

标签: json nsurlconnection nsurlrequest


【解决方案1】:

我会推荐使用sendAsynchronousConnection的方法,像这样的代码:

NSURL *url = [NSURL URLWithString:urlString];

NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url];
NSOperationQueue *queue = [[NSOperationQueue alloc] init];

[NSURLConnection sendAsynchronousRequest:urlRequest queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
{

    // Treat your response here
}];

在您处理您的响应的块内。解析您的 JSON,检查需要做什么并在其中调用相同的方法!使用它,您不需要实现委托方法。

【讨论】:

  • 所以我会使用它而不是调用 (void)connectionDidFinishLoading?
  • 是的,而不是[NSURLConnection alloc] initWithRequest:flightTrackJSONconnectionrequest delegate:self];,使用我在完成块之前和内部编写的方法,根据您从json解析的内容调用您的第二个连接。
  • 这是我所做的:pastebin.com/0885RZtG 非常感谢您的帮助。
  • 工作正常吗?在完成块中放入日志以检查响应NSLog(@"%@",[[NSString alloc] initWithData:data])
  • 我得到:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“数据参数为零”:/
猜你喜欢
  • 2012-04-14
  • 1970-01-01
  • 2011-11-16
  • 2016-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多