NSURLConnection的initWithRequest何时返回nil

时间:2010-10-20 12:53:40

标签: iphone ios nsurlconnection null

有谁知道在初始化NSURLConnection的情况下,返回nil而不是创建的连接。文档说它可能但是没有指定何时发生这种情况。

有问题的方法/讯息:

[[NSURLConnection alloc] initWithRequest:request delegate:self];

-

根据NSURLConnection班级参考:

  

返回值:URL请求的URL连接。如果无法初始化连接,则返回nil。

URL加载系统编程指南说明如下:

  

如果NSURLConnection无法为请求创建连接,则initWithRequest:delegate:返回nil。

-

虽然这个方法可能会返回nil,但我无法想出触发此方法的场景。我尝试了以下方案:

  • URLRequest使用空网址:connection:didFailWithError:委托方法,并将“不支持的网址”视为错误。
  • URLRequest使用无效的网址:connection:didFailWithError:委托方法,并将“错误的网址”视为错误。
  • URLRequest且不存在url:connection:didFailWithError:委托方法被调用“无法找到具有指定主机名的服务器”。为错误。
  • 有效请求但没有互联网:{“1}}委托方法被调用”Internet连接似乎处于脱机状态。“为错误。
  • 无请求:导致崩溃。

connection:didFailWithError:方法在每个方案中返回了一个有效的initWithRequest(除了最后一个方案),并在NSURLConnection中调用了相应的错误。

有没有人能够找出导致nil返回的场景?

5 个答案:

答案 0 :(得分:1)

我相信当它无法加载时也可以使用它,而不仅仅是初始化。 ( alloc 是单独完成的 - 这就是低mem可能会咬你的地方)所以(我猜)它可能会失败,因为你没有可用的网络(3G / Wifi)或它只是失败连接到服务器。无论如何,请使用:

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error

要解决实际问题。

您可以在没有网络的情况下模拟这种情况 - 或者甚至给它一个错误的网址。

答案 1 :(得分:1)

我猜答案是“从不”。似乎NSURLConnection返回nil的唯一方法是在[super init]失败。 ([super init]返回nil)但是作为NSURLConnection的超类是NSObject和NSObjects init只返回self(从不为零)

PS:对于IOS SDK 4.0,在模拟器上,可以在设备上有所不同。

答案 2 :(得分:0)

除了在低内存条件下执行此操作外,我会尝试以上所有操作。 IE,我认为当内部malloc失败时会发生这种情况。

答案 3 :(得分:0)

如果您指定的请求包含错误或不是所有基本值

,则会导致这种情况

答案 4 :(得分:0)

如果未在runLoop中创建NSURLConnection,则返回nil。