我试图使用Apple的课程:简单的Ping,但我无法使用它。
当我运行示例mac os x project时,它正在工作:
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(swift)应用程序中执行此操作时:
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)
不确定是否...需要循环 - 可能不需要。无论如何,我也试过没有它。
我已经将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
其他功能未被调用。为什么呢?
顺便说一下。我也尝试将pinger移动到类变量中:
var pinger: SimplePing?
完全没有区别。
我该如何解决这个问题?
答案 0 :(得分:1)
不确定为什么这不起作用,但是一旦解决了地址,你就可以自己调用ping方法。
一个变量,告诉您可以开始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)
在开始ping之前等待的SimplePing
委托方法:
func simplePing(pinger: SimplePing!, didStartWithAddress address: NSData!) {
println("didStartWithAddress")
canStartPinging = true
}