【问题标题】:iOS Reachability - issues with slow and missing notificationsiOS 可达性 - 通知缓慢和丢失的问题
【发布时间】:2012-02-24 05:12:42
【问题描述】:

我正在使用 Apple 提供的示例代码来监控可达性 - 但它仍然让我头疼。顺便说一句,我在 iOS 5 上运行。

// Initialise

hostReach = [[Reachability reachabilityForInternetConnection] retain];

[hostReach startNotifier];

和,

-(void) updateConnectionStatus
{
    // Check Internet connectivity

    NetworkStatus netStatus = [hostReach currentReachabilityStatus];

    if(netStatus == NotReachable)
    {
        NSLog (@"updateConnectionStatus: network not reachable!");

       [self setNetworkAvailable:NO];
    }
    else
    {
        NSLog (@"updateConnectionStatus: network reachable!");

       [self setNetworkAvailable:YES];
    }
}

还有,

//Called by Reachability whenever status changes.
- (void) reachabilityChanged: (NSNotification *) note
{
NSLog (@"reachabilityChanged");

   [self updateConnectionStatus];
}

不要忘记,

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    NSLog (@"applicationWillEnterForeground");

    [self updateConnectionStatus];
}

我已经使用了一段时间,但我想在应用程序中以一种重要的方式处理可访问性,例如在网络不可用时使用缓存数据。

第一个问题是应用进入前台后大约10秒左右才会收到状态变化的通知,甚至在应用重新进入前台时需要人工检查(如上图)返回不正确的结果。从控制台查看此示例日志,

2012-02-01 13:31:02.566 myapp[9807:707] applicationWillEnterForeground
2012-02-01 13:31:02.632 myapp[9807:707] Reachability Flag Status: -- ------- networkStatusForFlags
2012-02-01 13:31:02.634 myapp[9807:707] updateConnectionStatus: network not reachable!
2012-02-01 13:31:02.660 myapp[9807:707] reachabilityChanged
2012-02-01 13:31:02.662 myapp[9807:707] Reachability Flag Status: WR t----l- networkStatusForFlags
2012-02-01 13:31:02.663 myapp[9807:707] updateConnectionStatus: network reachable!

我都试过了,

hostReach = [[Reachability reachabilityWithHostName:@"www.apple.com"] retain];

和,

hostReach = [[Reachability reachabilityForInternetConnection] retain];

这意味着,如果应用上次运行时网络无法访问,则恢复效率低于应用再次通过网络连接运行时的效率。

这种延迟是不可避免的吗?

我的另一个问题是我的应用有时显然不会收到这些通知。当我的应用在后台运行一段时间时,这似乎会发生 - 尽管我无法随意重新创建它。

但有时当我回到应用程序时,它收到的最后一条通知是网络不可达,而且它显然从未看到网络可达通知:-(

其他人看到过类似的东西吗?

谢谢。

【问题讨论】:

    标签: ios reachability


    【解决方案1】:

    要回答我自己的问题,在单独的线程上调用 updateConnectionStatus 似乎已经解决了问题(它似乎更可靠地返回了正确的状态),但老实说,我不知道为什么。

    延迟通知仍然令人讨厌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      • 1970-01-01
      • 2014-05-24
      • 2012-09-12
      • 1970-01-01
      • 2011-03-24
      • 2012-04-06
      相关资源
      最近更新 更多