0

現在、Mac OS XアプリケーションでAppleのSimplePingを使用して、データを転送する前にURLにpingを実行しています。これは正常に機能しますが、UIがロックされます。適切な場所を調べていなかった可能性がありますが、これを防ぐにはどうすればよいですか?現在、currentRunLoopを使用していますが、これが問題だと思いますが、このアクション中にユーザーがUIを操作できるようにします(キャンセルなど)。UIがロックされないように、Simple Pingの実行ループを作成するにはどうすればよいですか?

SimplePing *localPing = [SimplePing simplePingWithHostName:pingHost];
        [localPing setDelegate:self];
        [localPing start];

        do {
            [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
        } while (localPing != nil);
4

1 に答える 1

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"];
于 2012-08-08T10:32:53.050 に答える