2010-10-20 26 views
18

有誰知道在初始化NSURLConnection時會返回nil而不是創建的連接。文件說這是可能的,但沒有指定發生這種情況。NSURLConnection的initWithRequest何時返回nil

的方法/消息中的問題:

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

-

按照NSURLConnection類參考:

返回值:該URL請求的URL連接。如果無法初始化連接,則返回nil。

的URL加載系統編程指南說以下內容:

如果NSURLConnection的不能創建請求的連接,initWithRequest:委託:返回nil。

-

雖然它可能是這個方法返回nil,我無法想出觸發這個場景。我嘗試了以下方案:

  • URLRequest與空網址:connection:didFailWithError:委託方法被調用時「不支持URL」的錯誤。
  • URLRequest無效的網址:connection:didFailWithError:委託方法被稱爲「錯誤的網址」爲錯誤。
  • URLRequest不存在的網址:connection:didFailWithError:委託方法使用「無法找到指定主機名的服務器」進行調用。作爲錯誤。
  • 有效的請求,但沒有互聯網:connection:didFailWithError:委託方法被稱爲「互聯網連接似乎是脫機。」作爲錯誤。
  • 零請求:導致崩潰。

initWithRequest方法在每個場景中返回一個有效NSURLConnection(除了最後一個),並與相應的錯誤稱爲connection:didFailWithError:

有沒有人能夠找出哪個場景會導致返回nil?

+0

你爲什麼想知道?如果它從未發生過,那不是問題,對吧? :-) – 2010-10-20 13:46:50

+0

它已經發生了,我試圖找出是什麼原因造成的。一位意大利測試人員報告說... #hint – 2010-10-20 13:57:27

+0

對此有何更新?仍然沒有令人滿意的答案;( – Klaas 2013-03-25 17:07:14

回答

0

我會嘗試所有上述內容,除非在低內存條件下進行。 IE,我認爲當內部malloc失敗時會發生。

+0

有關如何模擬/測試這個任何提示?有沒有比分配大量內存更聰明的方法? – 2010-10-20 14:40:35

1

我相信這也可以當它未能負載,不只是初始化使用。 (alloc單獨完成 - 這就是低內存可能咬你的地方)所以(我猜)它可能會失敗,因爲你沒有可用的網絡(3G/Wifi),或者它只是無法連接到服務器。在任何情況下,使用方法:

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

要獲得實際的故障。

您可能可以在沒有網絡的情況下模擬此操作 - 甚至可以給它一個錯誤的URL。

+0

我測試過你提到的所有場景,就像我在問題中提到的那樣,沒有網絡連接/錯誤的URL確實會調用連接:didFailWithError。但是這不是問題,我想知道初始化失敗的時候,我猜我必須嘗試模擬內存不足的情況 – 2010-10-25 07:24:55

+0

如果它返回nil,將不會有委託回調 – BTRUE 2015-07-29 17:59:23

0

我的東西,這是如果u指定的請求有誤或不是所有的基本價值觀

+0

重新閱讀這個問題,我已經測試過這些場景 – 2010-10-26 15:11:42

1

我想答案是「從不」造成的。似乎NSURLConnection返回nil的唯一方法是在[super init]失敗。 ([超級初始化]返回零)但作爲NSURLConnection的超類是NSObject和NSObjects的init只是返回自我(從來沒有零)

PS:這是IOS SDK 4.0,在模擬器上,可以是不同的設備上。

+0

這與它是一個「init *」方法一致 - 它符合到NSObject子類中'init'的一般規則:「這個方法的子類實現應該初始化並返回新的對象,如果它不能被我被硝化,他們應該釋放物體並返回零。「 – 2010-10-30 02:06:09

+0

不,我已經把它返回零。 – BTRUE 2015-07-29 17:58:58

0

如果未在runLoop中創建NSURLConnection,則返回nil。