我目前正在Mac OS X应用程序中使用Apple的SimplePing在传输数据之前对URL进行ping操作,这样可以正常工作,但会锁定我的UI。我可能没有找到合适的地方,但我如何防止这种情况发生?我目前正在使用currentRunLoop,我认为这是问题,但我仍然希望用户能够在此操作期间与UI进行交互(例如取消)。如何为Simple Ping创建运行循环,以便我的UI不会锁定?
SimplePing *localPing = [SimplePing simplePingWithHostName:pingHost];
[localPing setDelegate:self];
[localPing start];
do {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
} while (localPing != nil);
答案 0 :(得分:0)
这是因为在使用SimplePing时您的UI被锁定是因为ping实用程序需要一定的时间才能完成。而且似乎您在主线程中执行此操作,从而导致锁定UI界面白色ping任务正在进行中。 所以你可以使用以下代码
-(void) ping:(NSString *) ip
{
SimplePing *localPing = [SimplePing simplePingWithHostName:pingHost];
[localPing setDelegate:self];
[localPing start];
}
然后在新线程中调用ping函数,如
[NSThread detachNewThreadSelector:@selector(ping:) toTarget:self. withObject:@"IP Address"];