0

在我的初始视图控制器的viewDidLoad中,我检查互联网连接,如果可用,则开始一些下载过程。

如果没有任何连接(WiFi 或移动)或互联网可用 - 一切正常。但是,如果设备在没有互联网的情况下连接到 WiFi,应用程序会冻结。

if ([self isInternetAvail]) {
    [[Download sharedDownload] startUpdateProcessWithIndicatorInViewController:self];
}

这是功能:

- (BOOL)isInternetAvail
{
    NSString *hostName = @"google.com";
    Reachability *hostReach = [Reachability reachabilityWithHostName:hostName];
    NetworkStatus netStatus = [hostReach currentReachabilityStatus];
    if (netStatus == NotReachable) {
       return NO;
    } else {
       return YES;
    }
}

应用程序在此行冻结:

NetworkStatus netStatus = [hostReach currentReachabilityStatus];

使用更正确的方法来检查互联网连接,NSNotificationCenter但在这种情况下:

1)didFinishLaunchingWithOptions

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(networkStateChanged:)
                                             name:kReachabilityChangedNotification
                                           object:nil];

hostReach = [Reachability reachabilityWithHostName:@"www.google.com"];
[hostReach startNotifier];
[self updateInternetAvailWithReachability: hostReach];

附加方法:

- (void)updateInternetAvailWithReachability: (Reachability *)curReach
{
    netStatus = [curReach currentReachabilityStatus];  
}

- (void)networkStateChanged:(NSNotification *)notification
{
    Reachability *curReach = [notification object];
    NSParameterAssert([curReach isKindOfClass: [Reachability class]]);
    [self updateInternetAvailWithReachability:curReach];
}

2)在我的初始视图控制器的viewDidLoad中:

AppDelegate *d = (AppDelegate *)[[UIApplication sharedApplication] delegate];
if (!d.netStatus == NotReachable) {
   [[Download sharedDownload] startUpdateProcessWithIndicatorInViewController:self];
}

在这一步我得到NotReachable并且无法开始下载

3) NSNotificationCenter 告诉我“互联网可用”

我需要一些建议如何准备这个。

4

1 回答 1

0

当您向服务器请求时,请减少 timeoutInterval 选项并将其设置为最小值,以便请求不应等待很长时间才能获得响应,通过这种方式您可以减少冻结应用程序的时间。如果您想完全摆脱它,那么您应该在后台线程中的另一个线程上运行所有进程以进行网络检查。

于 2013-06-25T10:37:03.603 回答