gpt4 book ai didi

ios - Swift - 可达性崩溃

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

当按下 UIButton 时,我会调用 testReachability() 方法,以在完成操作之前检查互联网连接。这是使用 Ashley Mill 的可达性类。

在第 24 行,我调用completed(),以便如果应用程序可以到达网络,那么它将完成关闭并继续执行其余操作。但是,应用程序出现故障,并且此错误显示在调试控制台中:

“此应用程序正在从后台线程修改自动布局引擎,这可能会导致引擎损坏和奇怪的崩溃。这将在未来的版本中导致异常。”

如果我在第 26 行调用完成(),那么应用程序将完美、快速、流畅地运行,直到我失去互联网连接/进入飞行模式。然后,应用程序立即崩溃,并且 xcode 在点击按钮时失去了与设备的连接。

我的问题是,在检查可达性时,我可以采取什么措施来解决应用程序崩溃的问题。

func testReachability(completed: DownloadComplete)
{
let reachability: Reachability
do {
reachability = try Reachability.reachabilityForInternetConnection()
} catch {
return
}

reachability.whenReachable = { reachability in
// this is called on a background thread, but UI updates must
// be on the main thread, like this:
dispatch_async(dispatch_get_main_queue())
{
if reachability.isReachableViaWiFi()
{
print("Reachable via WiFi")
}
else
{
print("Reachable via Cellular")
}
}
completed()
}

reachability.whenUnreachable = { reachability in
// this is called on a background thread, but UI updates must
// be on the main thread, like this:
dispatch_async(dispatch_get_main_queue())
{
self.presentReachabilityAlertController()
}
}

do
{
try reachability.startNotifier()
}
catch
{

}
}

func presentReachabilityAlertController()
{
let alert = UIAlertController( title: "Network Connection Lost", message:"Try Again", preferredStyle: .Alert)
alert.addAction(UIAlertAction( title: "ok" , style: .Default) { _ in } )
presentViewController ( alert, animated: true ) { }
connected = false
}

最佳答案

听起来对complete的调用需要在主线程上执行。它会在 dispatch_async(dispatch_get_main_queue()) 内执行此操作。尝试将调用放入dispatch_async中完成,如下所示:

dispatch_async(dispatch_get_main_queue())
{
if reachability.isReachableViaWiFi()
{
print("Reachable via WiFi")
}
else
{
print("Reachable via Cellular")
}
complete()
}

如果这不能解决您处于飞行模式/离线状态时的情况,我认为我们将需要更多代码来帮助您解决问题。如果您可以展示如何/何时调用此函数、完整的回调,甚至可能会有所帮助的 presentReachabilityAlertController 函数。

关于ios - Swift - 可达性崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36780674/

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