iOS SimplePingDelegate回调方法未触发

时间:2019-07-15 17:18:01

标签: ios swift networking

我需要通过SimplePing库ping我的iOS应用中的主机名。调用pinger?.start()后不触发代理方法。

    //code to actually ping

    var pinger: SimplePing?
    var canStartPinging = false

    func ping() {
        pinger = SimplePing(hostName: "www.apple.com")        
        pinger?.delegate = self
        pinger?.start()

        repeat {
            print("Repeat loop \(String(describing: 
    pinger?.hostName))")

            if (canStartPinging) {
                pinger?.send(with: nil)
            }
            RunLoop.current.run(mode: RunLoop.Mode.default, before: 
    (NSDate.distantFuture ))
        } while(pinger != nil)
    }

    //SimplePingDelegate Methods below

    extension WelcomeViewController: SimplePingDelegate {
    private func simplePing(pinger: SimplePing!, didFailToSendPacket 
    packet: NSData!, error: NSError!) {
        print("didFailToSendPacket")
    }

    private func simplePing(pinger: SimplePing, didFailWithError error: 
    NSError) {
        print("didFailWithError")
    }

    private func simplePing(pinger: SimplePing!, 
    didReceivePingResponsePacket packet: NSData!) {
        print("didReceivePingResponsePacket")
    }

    private func simplePing(pinger: SimplePing!, 
    didReceiveUnexpectedPacket packet: NSData!) {
        print("didReceiveUnexpectedPacket")
    }

    private func simplePing(pinger: SimplePing!, didSendPacket packet: 
    NSData!) {
        print("didSendPacket")
    }


    private  func simplePing(pinger: SimplePing!, didStartWithAddress 
    address: NSData!) {
        print("didStartWithAddress : \(String(describing: address))")
        canStartPinging = true
        }
    }

未从委托接收回调。循环运行,但没有任何反应。打印“重复循环Optional(“ www.apple.com”)”,从不打印didStartWithAddress或didFailWithError。

1 个答案:

答案 0 :(得分:0)

结果证明委托方法的方法签名不正确。填充委托方法的最好方法是开始键入simplePing并允许Xcode建议方法完成选项!