【问题标题】:NSURLConnection fails after upgrade to iOS 5升级到 iOS 5 后 NSURLConnection 失败
【发布时间】:2011-10-16 15:14:16
【问题描述】:

我有一个非常简单的 NSURLConnection 调用,它在除 iOS 5 之外的所有 iOS 版本中都能完美运行。由于这是一个“sendSynchronousRequest”调用,因此在应用程序的任何地方都没有声明 NSURL 委托(响应应该直接返回到此方法称呼)。此外,由于这是一个 sendSynchronousRequest,因此应用中没有实现“didReceiveData”或其他与 NSURL 相关的方法。

这是有问题的代码行:

NSData *response = [NSURLConnection sendSynchronousRequest: serviceRequest returningResponse:nil error:nil];

当我在调试器中单步执行代码时,我可以确认应用正在发送请求,并且服务器正在接收请求。我还可以确认服务器随后将响应发送回客户端。

在我升级到 iOS 5 之前,这一切都运行良好。现在,在更新到 iOS5 之后,NSData 变量(响应)永远不会收到任何内容,并且总是返回 0 字节。

除了更新到 iOS5 之外,没有任何代码变化。

【问题讨论】:

  • 您是否尝试过使用虚拟的返回响应参数?类引用并没有说这个参数可能是 NULL (除了错误)。或者它可能已经在 Apple 的已知错误列表中。
  • 在我的应用程序中,我实际上没有将 nil 参数用于返回响应或错误。我使用的完整代码是: NSURLResponse *serviceResponse = nil; NSError *serviceError = nil; NSData *response = [NSURLConnection sendSynchronousRequest: serviceRequest returnedResponse: &serviceResponse error: &serviceError];如果我在调用后检查 NSError,它为空。如果我像这样检查 NSURLResponse: NSLog(@"serviceResponse = %@", [serviceResponse URL]);它会显示我联系的服务器的 URL。
  • 您的示例代码在我的 iOS5 模拟器上成功运行。如果您发布更完整的代码示例,也许我们可以复制您遇到的问题。

标签: xcode ios5


【解决方案1】:

在 iOS 5 中对 NSURLConnection 类进行了一些更改。特别是,一些已弃用的委托方法。我遇到了类似的问题,它是由不再调用的委托方法之一引起的。如果这听起来像您的问题,请查看正式的委托协议 NSURLConnectionDelegateNSURLConnectionDataDelegate

【讨论】:

    【解决方案2】:

    我在使用自定义 Web 服务器时遇到了同样的问题。问题原来是响应中的无效标头。我改变了:

    HTTP/1.1 200/OK

    到:

    HTTP/1.1 200 正常

    iOS 5 现在接受响应。检查您的数据包捕获。您可能有相同或相似的问题。

    【讨论】:

      猜你喜欢
      • 2021-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多