NSURLConnection的initWithRequest何时返回nil

有谁知道在哪种情况下初始化一个NSURLConnection返回nil而不是创build的连接。 该文件说,这是可能的,但没有指定发生这种情况。

有问题的方法/消息:

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

根据NSURLConnection类参考:

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

URL加载系统编程指南说:

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

虽然这个方法有可能返回nil,但是我无法想出一个触发这个的scheme。 我已经尝试了以下情况:

  • 具有空url的URLRequestconnection:didFailWithError:委托方法被称为“不支持的URL”,作为错误。
  • 带有无效URL的URLRequestconnection:didFailWithError:委托方法被称为“错误的URL”。
  • URLRequest不存在url: connection:didFailWithError:调用委托方法“找不到指定主机名的服务器”。 作为错误。
  • 有效的请求,但没有互联网: connection:didFailWithError:委托方法被称为“Internet连接似乎是脱机。 作为错误。
  • 零请求:导致崩溃。

initWithRequest方法在每个场景中(除了最后一个场景)都返回了一个有效的NSURLConnection ,并且调用了connection:didFailWithError:带有一个适当的错误。

有没有人能够找出哪个场景导致零返回?

我相信这也可以用于加载失败,而不仅仅是初始化 。 (这个分配是分开完成的 – 这是低内存可能会咬你的地方)所以(我猜)它可能会失败,因为你没有一个可用的networking(3G / Wifi),或者它只是无法连接到服务器。 无论如何,请使用:

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

得到实际的失败。

你可能会模拟这个networking的缺席 – 甚至给它一个错误的url。

我想答案是“从不”。 似乎唯一的方式NSURLConnection返回nil失败[超级初始化]。 ([超级初始化]返回零)但作为超类的NSURLConnection是NSObject和NSObjects的init只是返回自我(从来没有零)

PS:这是IOS SDK 4.0,在模拟器,可以是不同的设备上。

我会尝试所有上述内容,除非在低内存条件下进行。 IE,我认为这将发生在一个内部的malloc失败。

如果你指定的请求有错误或者不是全部的基本值,我就会引起这个问题

如果不是在runLoop内创build的,NSURLConnection返回nil。