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的
URLRequest
:connection:didFailWithError:
委托方法被称为“不支持的URL”,作为错误。 - 带有无效URL的
URLRequest
:connection: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。