Swift: netServiceBrowser didRemoveService MacOSX 10.13 - PullRequest
0 голосов
/ 22 сентября 2018

Я пытаюсь запустить NetServiceBrowser.Он обнаружит новое устройство ZeroConf, как только оно появится в сети.Однако он не определяет, когда устройство удалено из сети.

netServiceBrowser (aNetServiceBrowser: NetServiceBrowser !, didRemoveService aNetService: NetService !, moreComing: Bool) никогда не вызывается.

Я что-то пропустил?

class BonjourDiscovery: NSObject, NetServiceBrowserDelegate, NetServiceDelegate
{
    var browser: NetServiceBrowser
    var services = [NetService]()
    static let instance = BonjourDiscovery()

    override init()
    {
        browser = NetServiceBrowser()
        services = []
    }

    func startDiscovery()
    {
        browser.delegate = self
        browser.searchForServices(ofType: "_smb._tcp.", inDomain: "")
    }

    func stopDiscovery()
    {
        browser.stop()
    }

    func netServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool)
    {
        print ("Found:" + service.name)
        self.services.append(service)
    }

    func netServiceBrowser(aNetServiceBrowser: NetServiceBrowser!, didRemoveService aNetService: NetService!, moreComing: Bool)
    {
        print ("Removed:" + aNetService.name)

        if let index = services.index(of: aNetService)
        {
            services.remove(at: index)
        }        
    }
}

1 Ответ

0 голосов
/ 23 сентября 2018

Для полноты я отправил полный ответ, исправляя определение функции didRemoveService (Спасибо Martin R):

class BonjourDiscovery: NSObject, NetServiceBrowserDelegate, NetServiceDelegate
{
    var browser: NetServiceBrowser
    var services = [NetService]()
    static let instance = BonjourDiscovery()

    override init()
    {
        browser = NetServiceBrowser()
        services = []
    }

    func startDiscovery()
    {
        browser.delegate = self
        browser.searchForServices(ofType: "_smb._tcp.", inDomain: "")
    }

    func stopDiscovery()
    {
        browser.stop()
    }

    func netServiceBrowser(_ browser: NetServiceBrowser, didFind service: NetService, moreComing: Bool)
    {
        print ("Found:" + service.name)
        self.services.append(service)
    }

    func netServiceBrowser(_ browser: NetServiceBrowser, didRemove service: NetService, moreComing: Bool)
    {
        print ("Removed:" + service.name)

        if let index = services.index(of: service)
        {
            services.remove(at: index)
        }
    }
}
...