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

标签 ios swift uialertview semaphore cocoaasyncsocket

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

如果我需要更换仪器/连接到另一台仪器,我必须等待一些事件:

  1. 我必须确保断开连接。这通常是通过等待包含在 GCDAsyncSocketDelegate
  2. 中的 public func socketDidDisconnect(...) 来完成的
  3. 我必须连接到其他仪器。如果还是tcp接口(interface),就得等public func socketDidConnectToHost(...)

所以有两个操作需要一些时间。因为没有有效的连接,用户只能等待。为了通知用户发生了什么,我想在上述事件完成之前显示一个 UIAlert。我怎样才能做到这一点?

最佳答案

Semaphores 对于您的案例来说似乎太低了,除非您是出于教育目的而这样做。

改为使用 NotificationCenter:

1) 从 socketDidDisconnect(...) 发布一个 "didDisconnectNotification"(字符串名称是任意的),并在其中更新相应的处理程序您的 viewController UI 指示用户存在连接问题。
2) 从 socketDidConnectToHost(...) 发布一个 “didConnectNotification” 并在它的处理程序中(与 1 不同)关闭连接问题指示器^。

注意:在您的 viewController 第一次出现时,您可能会从 2) 开始,所以没有什么可以忽略的。

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

在上述两个操作独立的情况下(即它们可以以任何相对于彼此的顺序发生),要使用的 GCD 机制将是 DispatchGroup。它有点接近于您尝试使用信号量,但是您也不需要它,因为您的 2 个事件(断开连接和连接)是相关的(即它们各自的顺序发生是固定的)。
DispatchGroup 的一个有效使用案例是当您不关心它们到达的顺序时同步许多图像获取请求的响应(您要么获取所有请求要么不继续)。

关于ios - Swift:在等待信号量时显示 UIAlert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53392527/

相关文章:

iOS - 在一个阅读 session 中同时获取 NFCTag 硬件 ID 和 NDEF 消息

ios - UIDatePicker 自定义

ios - TTTAttributedLabel 链接字体在 UIAlertView 出现时发生变化

ios - 如何在iPhone中快速从文件路径url获取视频或图像?

ios - UIActivityController 共享 URL 文件

ios - 显示键盘时向上移动 View ,用于堆栈 View 中的文本字段

ios - 在 UIAlertView 覆盖上方添加按钮

javascript - 为什么当我返回上一页时,我的 url 不正确(iOS 下的 Chrome,浏览器返回)

ios - 在表格 View 单元格中制作 'Read More' 按钮

ios - 可选链上的 EXC_BREAKPOINT