在swift中使用简单的Ping(iOS)

我试图使用苹果的类:简单的平,但我不能得到这个工作。

当我正在运行示例mac os x项目它的工作:

2015-06-17 00:03:22.569 SimplePing [20386:3133535] pinging 192.168.1.102

2015-06-17 00:03:22.569 SimplePing [20386:3133535]#0寄出

2015-06-17 00:03:22.570 SimplePing [20386:3133535]#0收到

2015-06-17 00:03:23.570 SimplePing [20386:3133535]#1发送

2015-06-17 00:03:23.571 SimplePing [20386:3133535]收到#1

等等..

但是,当我从我的iOS(迅速)的应用程序:

let pinger = SimplePing(hostName: "192.168.1.102") pinger.delegate = self; pinger.start() do { NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture() as! NSDate) } while(pinger != nil) 

不知道是做.. while循环是需要的 – 可能不需要。 无论如何,我也没有尝试过。

我已经将SimplePingDelegate添加到我的课程中了:

  func simplePing(pinger: SimplePing!, didFailToSendPacket packet: NSData!, error: NSError!) { println("didFailToSendPacket") } func simplePing(pinger: SimplePing!, didFailWithError error: NSError!) { println("didFailWithError") } func simplePing(pinger: SimplePing!, didReceivePingResponsePacket packet: NSData!) { println("didReceivePingResponsePacket") } func simplePing(pinger: SimplePing!, didReceiveUnexpectedPacket packet: NSData!) { println("didReceiveUnexpectedPacket") } func simplePing(pinger: SimplePing!, didSendPacket packet: NSData!) { println("didSendPacket") } func simplePing(pinger: SimplePing!, didStartWithAddress address: NSData!) { println("didStartWithAddress") } 

所以它给了我输出:

2015-06-17 00:32:12.368可用[938:150352] CFHostStartInfoResolution

2015-06-17 00:32:12.374可用[938:150352]> HostResolveCallback

didStartWithAddress

其他function不被调用。 为什么?

顺便说一句。 我也试过将pinger移入类variables,如下所示:

 var pinger: SimplePing? 

没有任何区别。

我怎样才能解决这个问题?

不知道为什么这不起作用,但一旦解决地址,你可以自己调用ping方法。

一个variables告诉你,你可以开始ping:

 var canStartPinging = false 

调用ping的代码:

 let pinger = SimplePing(hostName: "www.apple.com") pinger.delegate = self; pinger.start() do { if (canStartPinging) { pinger.sendPingWithData(nil) } NSRunLoop.currentRunLoop().runMode(NSDefaultRunLoopMode, beforeDate: NSDate.distantFuture() as! NSDate) } while(pinger != nil) 

SimplePing委托方法,您可以开始ping之前等待:

 func simplePing(pinger: SimplePing!, didStartWithAddress address: NSData!) { println("didStartWithAddress") canStartPinging = true }