我有这个方法
- (BOOL)connectedToInternet
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString:@"http://www.google.com/"]];
[request setHTTPMethod:@"HEAD"];
NSHTTPURLResponse *response;
[NSURLConnection sendSynchronousRequest:request
returningResponse:&response error: NULL];
return ([response statusCode] == 200) ? YES : NO;
}
该方法需要几秒钟的时间才能完成,我可以在简单的条件下使用它来了解我是否有互联网连接。
有没有办法在后台线程中执行此操作而无需更改所有代码。
我这样称呼它
if([self connectedToInternet])
因此,如果我在后台线程中执行此操作,则无法获取返回值,然后我的方法无法返回值。
如果我必须改变所有它不值得。
我希望你能理解我的问题并感谢你的帮助。
答案 0 :(得分:2)
在Apple" Reachability" Code Sample请注意reachabilityWithAddress:
方法。
答案 1 :(得分:0)
你可以使用块做类似的事情;
定义(.h)
+ (void)isConnectedToInternet:(void (^)(BOOL connected))block;
实施(.m)
+ (void)isConnectedToInternet:(void (^)(BOOL))block
{
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:
[NSURL URLWithString:@"http://www.google.com/"]];
[request setHTTPMethod:@"HEAD"];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
if (block) {
block( ([httpResponse statusCode] == 200) ? YES : NO);
}
}];
}
然后将其称为
[MyClass isConnectedToInternet:^(BOOL connected) {
if (connected) {
// do stuff;
}
}];
答案 2 :(得分:0)
我不知道你想要做什么,但你想要使用的可能是:
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_async(queue, ^{
//your asynchronous code here
});
但是通过使用if条件,你需要结果才能继续,不是吗?那么为什么要在后台运行代码?
答案 3 :(得分:0)
我建议您实施的方法是“了解互联网是否连接”并不是最优化的...几天之后我也试图实现同样的事情......我遇到了几个解决方案,通过互联网..我在我的博客上写了这篇文章.. Checking Internet connection in cocoa.
了解网络连接与否的首选方法是使用可达性类。您可以从以下代码中获得使用它的线索:NetworkCheckUtility.
希望这会有所帮助: - )