gpt4 book ai didi

ios - DispatchQueue.main.asyncAfter 方法在特定调用中卡住 UI

转载 作者:行者123 更新时间:2023-11-28 08:20:23 29 4
gpt4 key购买 nike

我在修改对象的属性后调用 DispatchQueue.main.asyncAfter 方法(我用 KVO 触发它)。我只显示一秒钟的确认 View ,然后运行一个在 UI 上做其他事情的 block (弹出一个 View Controller )。问题是,当我从 UICollectionViewCell 调用此方法时工作正常,但当我从应用程序中的另一个特定 UICollectionViewCell 调用此方法时,它会卡住。该方法在 UIView 的扩展中实现。

public func showConfirmViewWith(title: String!, frame: CGRect? = screenBounds, afterAction: (() -> Void)?) {

let confirm = ConfirmationView(frame: frame!, title: title)

self.addSubview(confirm)

confirm.checkBox?.setCheckState(.checked, animated: true)

DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(1) ) {

if afterAction != nil {
afterAction!()
}
confirm.removeFromSuperview()
}
}

当它卡住时,Dispatch 中的代码永远不会被调用,我在里面有一个断点,但永远不会到达那个点。

更新这是我暂停执行时的堆栈跟踪:

First time I paused the execution

最佳答案

我解决了这个棘手的错误。首先,DispatchQueue.main.asyncAfter 调用没有任何问题。该应用程序进入循环并且没有任何被锁定的迹象。我运行了探查器,发现一些约束的布局被一遍又一遍地调用。我在 collectionViewCell 中有一个 tableView,在完成对 asyncAfter 的调用时有一个动画。问题是覆盖方法 layoutSubviews 内部有一个 tableView.reloadData(),所以每次我试图在带有动画的异步调用后退出时,都会调用 layoutsubviews 并且 reloadData() 一遍又一遍地触发。我不确定为什么 reloadData 在那里,但现在似乎工作正常。

关于ios - DispatchQueue.main.asyncAfter 方法在特定调用中卡住 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41497339/

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