如何等待NSStream打开或失败



当前,当我打开NSInputStream(例如)时,我可以将其设置为获取一个指示它已完全打开的事件。但如果它失败了,就根本没有任何事件。我从来没有听说开幕式没能完成。我可以在它试图打开时进行民意调查,但之后我必须在很长一段时间内绑住一个线程。

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

我还想过创建一个我可以等待一段时间的活动。如果连接成功,事件将发出信号并使我退出等待状态。如果发生超时,我可以测试状态,看看它是否失败,或者再次回到等待状态。但这当然是B计划,既没有说服力,也没有效率。浏览CocoaTouch文档根本不清楚如何创建这样一个信号,让我可以等待一段时间。

如有任何帮助,我们将不胜感激。

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

你可以在打开流的同时启动一个NSTimer,间隔更短,但随后你会遇到这个间隔应该是多少的问题?

通常最好将取消连接的选项交给用户,除非发生TCP/IP超时。

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

最新更新