【发布时间】: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 模拟器上成功运行。如果您发布更完整的代码示例,也许我们可以复制您遇到的问题。