我如何等待NSStream打开或失败?

时间:2012-07-31 06:33:44

标签: ios nsstream

目前,当我打开一个NSInputStream(例如)时,我可以将其设置为获得一个表明它已完全打开的事件。但如果它失败了,根本就没有事件。我从未被告知开幕未能完成。我可以在尝试打开时进行轮询,但是我必须在很长一段时间内建立一个线程。

我想要做的是编写等待流打开或无法打开的高效代码。有没有这样的方式使用NSStream等人?

我还想过创建一个我可以等待一段时间的事件。如果连接成功,事件将发出信号并弹出我的等待状态。如果发生超时,我可以测试状态并查看它是否失败或再次返回等待状态。但当然这是计划B,不是雄辩而且效率不高。通过CocoaTouch文档查看并不清楚如何创建这样一个我可以等待超时的信号。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:7)

NSStream无法打开时,会发生一个事件:NSStreamEventErrorOccurred。您遇到的问题可能是TCP / IP超时可能很长。因此,如果与主机的连接失败,则可能需要30秒才能收到此事件。

你可以在打开流的时间较短的同时启动一个NSTimer,但是你会遇到这个间隔应该是什么的问题?

除非发生TCP / IP超时,否则通常最好保留取消用户手中连接的选项。

我在许多项目中所做的是在大约1秒钟后弹出一个带有活动指示器和取消按钮的自定义模态视图。本地网络上的许多连接将在此之前完成,用户不会被弹出窗口打扰。对于较慢的连接,这允许用户决定他们愿意等待多长时间。您甚至可以在较长时间后更新模态视图中的消息,表示连接时间比平时要长,因此他们知道程序知道他们正在等待!