0

我已经阅读 了这个问题,发现它的答案对于检查 iPhone 的互联网连接很有用。我在 viewDidLoad 消息中实现了检查。但是,我的应用程序确实从服务器的 XML 文件中加载数据(在 viewWillAppear 内)。在这种情况下,必须在应用程序尝试从 Internet 源加载数据之前完成检查。我的问题是网络检查需要几秒钟,但应用程序确实继续执行代码。
这导致延迟检查。所以有一个有效的互联网连接,但存储此信息的 bool 变量设置得太晚了。

viewDidLoad 中的代码

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(checkNetworkStatus:) name:kReachabilityChangedNotification object:nil];
internetReachable = [[Reachability reachabilityForInternetConnection] retain];
[internetReachable startNotifier];

所选消息的实现方式与上面链接中的示例相同。此外,它设置了一些布尔属性,因此我可以访问应用程序中的连接状态。

viewWillAppear 中的代码

if(internetActive == TRUE)
{
    NSLog(@"connected");
    //Code to load XML stuff
}
else
{
    NSLog(@"not connected");
}

控制台显示“未连接”。但几秒钟后,“checkNetworkStatus”中的调试日志显示互联网连接可用,并且将设置布尔“internetActive”。
我认为网络检查提供他关于连接状态的报告对我的目的来说为时已晚。有没有办法延迟应用程序直到建立连接?或者这会导致应用程序崩溃,因为视图在几秒钟内没有显示?是否有任何其他可能性来确保连接?

我的第二个问题是如何确保特定的互联网地址可用?我上面提到的链接

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

检测与主机的连接,但我想详细介绍并尝试检测主机是否值得特定地址。但是输入完整地址路径(例如“localaddress.mylan.de/lan/xml/”)而不是主机会导致主机处于不可访问的连接状态。在浏览器地址栏中输入提到的地址会显示正确的结果。我想我必须检查它,但如何?

谢谢阅读 :)

4

2 回答 2

1

在获得更多 IOS 开发经验后,我的第一个问题通过三个步骤解决。

  1. 第一步是启动所有必要的通知程序一次。这可以通过在第一个加载的 ViewController 的 viewDidLoad 中启动它们来完成。
  2. 通过评估可达性对象的名为 currentReachabilityStatus 的属性来检查当前连接状态。即使连接可用,此状态也可以是“未连接”。如果检查是在启动通知程序的 ViewController 中完成的,则会发生这种情况。原因是通知程序识别连接所需的时间。如果 currentReachabilityStatus 属性被评估为已连接,则可以启动数据加载过程。
  3. 在添加通知程序期间添加选择器的方法内评估连接状态。每次连接状态更改时都会启动此方法。第一次调用将在启动通知程序后直接进行。如果连接状态被评估为已连接,则可以启动数据加载过程。

第二个问题到现在还没有解决。可能除了向目标发送请求并等待响应或超时之外别无他法。

于 2011-08-29T13:31:25.047 回答
0

您是否尝试过 dispatch_async & dispatch_sync(dispatch_get_main_queue( reload data here ) ?

于 2012-11-15T02:41:41.087 回答