Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.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
iOS可访问性-通知速度慢且丢失的问题_Ios_Reachability - Fatal编程技术网

iOS可访问性-通知速度慢且丢失的问题

iOS可访问性-通知速度慢且丢失的问题,ios,reachability,Ios,Reachability,我正在使用苹果提供的示例代码来监控可达性——但这仍然让我头疼。顺便说一句,我正在运行iOS 5 // Initialise hostReach = [[Reachability reachabilityForInternetConnection] retain]; [hostReach startNotifier]; 以及 而且 //Called by Reachability whenever status changes. - (void) reachabilityChanged: (

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

// Initialise

hostReach = [[Reachability reachabilityForInternetConnection] retain];

[hostReach startNotifier];
以及

而且

//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];
以及

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

这种延误不可避免吗

我的另一个问题是,我的应用程序显然有时没有收到这些通知。这似乎发生在我的应用程序在后台运行了一段时间之后——尽管我不能随意重新创建它

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

还有人见过这样的吗


谢谢。

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

延迟通知仍然令人讨厌

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