2012-07-31 41 views
3

當前當我打開一個NSInputStream(例如)我可以設置它來獲取一個事件,指示它已完全打開。但如果失敗了,根本就沒有事件發生。我永遠不會被告知開幕未能完成。我可以在試圖打開時進行輪詢,但是我必須在可能很長的一段時間內綁定一個線程。如何等待NSStream打開或失敗?

我想要做的是編寫高效的代碼,等待流打開或無法打開。有沒有使用NSStream等的方法?

我還想到創建一個可以等待一段時間的事件。如果連接成功,該事件將發出信號並使我脫離等待狀態。如果發生超時,我可以測試狀態並查看它是否失敗或再次返回到等待狀態。但是,這當然是B計劃,而不是口才和效率。並且查看CocoaTouch文檔並沒有清楚地說明如何創建這樣的信號,以便我可以等待超時。

任何幫助,將不勝感激。

回答

7

發生NSStream無法打開時發生的事件:NSStreamEventErrorOccurred。也許你遇到的問題是TCP/IP超時時間可能很長。因此,如果與主機的連接將失敗,則可能需要30秒才能獲得此事件。

您可以同時打開NSTimer打開流的一段較短的時間間隔,但然後你遇到了什麼時間間隔應該是什麼問題?

除非發生TCP/IP超時,否則將選項留在用戶手中取消連接通常會更好。

我在一些項目中所做的工作是在大約1秒後彈出一個自定義模態視圖,並帶有一個活動指示器和一個取消按鈕。本地網絡上的許多連接將在此時間之前完成,用戶不會被彈出窗口打擾。對於較慢的連接,這允許用戶決定他們願意等待多久。你甚至可以在更長的一段時間後更新模態視圖中的消息,說它比平時花費的時間更長,所以他們知道程序知道他們正在等待!

+0

你是對的。在發生錯誤事件之前,這只是一段很長的時間。我認爲你的建議解決方案總的來說是我需要實現的。非常感謝您花時間回答這個問題並提出一個好的解決方案。 – user574771 2012-08-01 01:00:46