【问题标题】:How to remove a published service NetService如何删除已发布的服务 NetService
【发布时间】:2020-03-18 10:51:48
【问题描述】:

我正在使用最新的 Swift 文档编写 NetService,它可以发布和搜索。但我无法从发布者那里删除服务。这里无法理解 RunLoop 的作用。但是,如果我终止该应用程序,则服务将被删除。

这是用于发布服务的代码。

class ServicePublisher : NSObject {
    var nsNetService : NetService!
    init?(domain : String, type : String, name : String, port : Int32){
        nsNetService = NetService(domain: domain, type: type, name: name, port: port)
        if nsNetService == nil{
            return nil
        }
    }
    func publish() {
        nsNetService.publish(options:NetService.Options.listenForConnections)
    }
    func setDelegate(delegate : NetServiceDelegate) {
        nsNetService.delegate = delegate
    }
    func stop(){
        nsNetService.stop()
    }
}

【问题讨论】:

  • stop 不是即时的,实际上所有 NetService 方法都是异步的,您委托 netServiceDidStop 将在服务停止时通知您。由于 NetService 本质上是异步的,因此需要 RunLoop 来处理来自它的事件,NetService 的 RunLoop 可以在后台线程中运行,也可以是默认线程。
  • netServiceDidStop 在我调用 stop 后永远不会被调用。我无法理解 RunLoop 的作用。
  • @Asperi 我没有将按钮附加到应该在 NetService 上调用 stop 的函数,因此是问题所在。但我不需要为此配置 RunLoop,服务被删除,网络服务浏览器也能够检测到该服务被删除。

标签: ios swift bonjour nsnetservice


【解决方案1】:

nsNetService.stop() 应该停止服务并将其从 DNS SD 中删除。 NetServiceBrowser 还能够检测服务的删除。我的错误是我没有将 UIButton 与应该调用 stop() api 的函数连接起来,因此没有删除服务。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    相关资源
    最近更新 更多