可达性问题Apple类

时间:2011-01-03 12:08:40

标签: iphone objective-c-blocks reachability

我有一个使用UITabBar的应用程序,它必须从Internet下载内容,所以我决定使用类Reachability。当我启动它时,该方法很有效,但是如果我不等待所有工作完成并且我转到另一个tabBar索引,那么我回到第一个,应用程序保持并且不移动。这是一些代码:

- (void)viewWillAppear:(BOOL)animated {
[[self.navigationController navigationBar] setHidden:YES];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
[internetReachable startNotifier];
[hostReachable startNotifier];
} 
- (void)checkNetworkStatus:(NSNotification *)notice {
BOOL flag;
UIAlertView *alert;
NetworkStatus internetStatus = [internetReachable currentReachabilityStatus];

alert = [[UIAlertView alloc] initWithTitle:@"Attenzione!" message:@"Non ci sono connessioni disponibili a internet: impossibile scaricare i dati!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
switch ( internetStatus ) {
    case NotReachable:
        self.internetActive = NO;
        flag = NO;
        break;
    case ReachableViaWiFi:
        self.internetActive = YES;
        flag = YES;
        break;
    case ReachableViaWWAN:
        self.internetActive = YES;
        flag = YES;
        break;
}
if ( flag )
    [NSThread detachNewThreadSelector:@selector(loadDataFromInternet) toTarget:self withObject:nil];
else {
    [alert show];
    [self.spinner stopAnimating]; 
}

[alert release];
}

我会粘贴您可能需要的所有其他内容。

1 个答案:

答案 0 :(得分:4)

我的应用程序遇到了类似的问题。这也类似于我刚刚回答的this question - 确保你是异步检查,而不是在主线程上(或者至少没有阻止UI)。

另外,有趣的是我读过一个资源,表明当你需要上网时,就去吧。不要先使用Reachability进行“预检”。在您未能确定失败原因后使用可达性:)。我记得那段智慧来自苹果公司本身 - 但是我忘记了我在哪里阅读它并且谷歌很快找不到它。