Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 你把你的呼叫放在哪里?_Objective C_Ios_Reachability - Fatal编程技术网

Objective c 你把你的呼叫放在哪里?

Objective c 你把你的呼叫放在哪里?,objective-c,ios,reachability,Objective C,Ios,Reachability,我正在尝试在我的应用程序中实现可达性。我在applicationdFinishLaunching中有它。如果我的连接真的很糟糕,并且我启动了应用程序,那么可访问性将花费很长时间,并且经常会导致应用程序崩溃,并显示应用程序未能及时启动的错误消息 因此,我尝试在后台线程中调用可达性。但是当我这样做时,我不再收到可达性通知 我应该在哪里调用可达性 编辑: 我根据下面的建议添加了TonyMillions的可达性代码,但我仍然得到相同的应用程序在非常糟糕的网络条件下未能及时加载错误。要复制我看到的内容,请

我正在尝试在我的应用程序中实现可达性。我在
applicationdFinishLaunching
中有它。如果我的连接真的很糟糕,并且我启动了应用程序,那么可访问性将花费很长时间,并且经常会导致应用程序崩溃,并显示
应用程序未能及时启动的错误消息

因此,我尝试在后台线程中调用可达性。但是当我这样做时,我不再收到可达性通知

我应该在哪里调用可达性

编辑

我根据下面的建议添加了TonyMillions的可达性代码,但我仍然得到相同的
应用程序在非常糟糕的网络条件下未能及时加载
错误。要复制我看到的内容,请转到Settings.app->Developer->networklinkconditor,打开并将其设置为100%丢失

你的应用程序在这种情况下仍然加载吗

因此,我将对可达性的调用放在后台线程中。但是 当我这样做时,我不再收到可达性通知

在后台线程中调用可达性时,应该在后台运行循环中调度可达性,并确保后台线程运行循环正在运行

要在后台线程中执行:

  • 创建可达性对象

    可达性*可达性=[可达性可达性WithHostName:@“www.google.com”]

  • [可达性启动通知]

  • [[nsrunlop currentRunLoop]run]


  • 这可能会起作用,但建议在主线程中安排通知程序。

    在Github上使用Tony数百万可达性项目

    然后在我的应用程序委托中,我刚刚输入了applicationdFinishLaunching

    self.reachability = [Reachability reachabilityForInternetConnection];
    
    [self.reachability startNotifier];
    
    然后,当状态更改时,将调用它

    #pragma mark - Reachability
    
    - (void)reachabilityChanged:(NSNotification *)note {
    
        NetworkStatus ns = [(Reachability *)[note object] currentReachabilityStatus];
    
        if (ns == NotReachable) {
    
            if (![self.networkAlert isVisible]) {
    
                if ([self networkAlert] == nil) {
    
                    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"\n\nNo Internet Connection" message:@"You require an internet connection to communicate with the server." delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
                    [self setNetworkAlert:alert];
                }
    
                [self.networkAlert show];  
            }
        } else {
    
            if ([self networkAlert] != nil) {
    
                [self.networkAlert dismissWithClickedButtonIndex:0 animated:YES]; 
            }
        }
    }
    

    托尼·米利昂帮我解决了这个问题

    如果您正在使用他的可达性替换,您所要做的就是将
    startNotifier
    调用包装如下:

    dispatch_async(dispatch_get_global_queue(0,0), ^{
        [self.internetReach startNotifier];
    });
    

    该应用程序不会在恶劣的网络条件下无法启动,并且您仍然会在主线程上收到通知。

    我现在终于可以开始测试了。我添加了TonyMillions的可达性代码,但我仍然得到相同的
    应用程序未能及时加载
    错误,网络状况非常糟糕。尝试进入Settings.app->Developer->networklinkconditor,将其打开并设置为100%丢失。你的应用程序在这种情况下仍然加载吗?