gpt4 book ai didi

objective-c - 在哪里进行可达性检查以确保在查看数据之前加载数据?

转载 作者:行者123 更新时间:2023-11-29 05:05:22 26 4
gpt4 key购买 nike

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

viewDidLoad中的代码

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

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

viewWillAppear 中的代码

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

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

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

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

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

感谢您的阅读:)

最佳答案

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

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

第二个问题至今仍未解决。可能除了向目标发送请求并等待响应或超时之外没有其他办法。

关于objective-c - 在哪里进行可达性检查以确保在查看数据之前加载数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5618683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com