Swift:在等待信号量时显示UIAlert

时间:2018-11-20 11:58:11

标签: ios swift uialertview semaphore cocoaasyncsocket

我正在使用CocoaAsyncSocket容器将数据从测量仪器传输到iOS设备。传输效果很好,但是如果必须在不同的移动乐器之间进行切换,我会遇到麻烦。

如果我需要更换乐器/连接其他乐器,则必须等待一些事件:

  1. 我必须确保断开连接。这通常是通过等待public func socketDidDisconnect(...)
  2. 中包含的GCDAsyncSocketDelegate来完成的
  3. 我必须连接到另一台乐器。如果仍然是tcp接口,我必须等待public func socketDidConnectToHost(...)

因此有两个操作需要一些时间。因为没有有效的连接,所以用户只能等待。为了通知用户正在发生的事情,我想提出一个UIAlert,直到上述事件完成为止。我该如何实现?

1 个答案:

答案 0 :(得分:1)

信号量对于您的情况来说似乎太低了,除非您出于教育目的而这样做。

改为使用 NotificationCenter

1)从socketDidDisconnect(...)发布“ didDisconnectNotification” (字符串名称是任意的),并在对应处理程序中更新viewController UI,以指示用户连接问题。
2)从socketDidConnectToHost(...)发布“ didConnectNotification” ,并在其处理程序(与1区别)中关闭连接问题指示器^。

注意:在您的viewController初次出现时,您可能会以2)开头,因此没有什么可以关闭的。

您可以在SO上找到许多与NotificationCenter相关的示例: https://stackoverflow.com/a/24756761/5329717

在上述两个操作是独立的(即它们可以相对于彼此以任何顺序发生)的情况下,要使用的GCD机制为 DispatchGroup 。它与您使用信号量的尝试有些相似,但是您也不需要,因为您的2个事件(断开和连接)是依赖的(即它们各自的顺序) 已修复)。
DispatchGroup 的一个有效用法示例是,当您不关心它们的到达顺序(您要么全部获得要么不进行处理)时,同步许多图像获取请求的响应。