2012-07-31 72 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