gpt4 book ai didi

swift - UI 快速更改,CoreAnimation : warning, 删除了未提交 CATransaction 的线程

转载 作者:行者123 更新时间:2023-11-28 15:56:33 24 4
gpt4 key购买 nike

我对 swift 比较陌生,想知道是否有人可以帮助解决这个问题。

我试图在服务调用期间将按钮上的标签更改为加载微调器,然后在不久之后更改为该调用的响应消息。

我在日志中收到此错误:

CoreAnimation:警告,已删除具有未提交 CATransaction 的线程;在环境中设置 CA_DEBUG_TRANSACTIONS=1 以记录回溯。

感谢您的帮助。我已经阅读了这些核心动画错误,但我不确定我做错了什么,因为这里的所有内容都是异步完成的。

这是更正后的代码,感谢@Pierce:

        self.pastebinButton.isEnabled = false
self.pastebinButton.title = ""
self.pastebinProgressIndicator.startAnimation(nil)

pastebinAPI.postPasteRequest(urlEscapedContent: urlEscapeText(txt: text)) { pasteResponse in

DispatchQueue.main.async {
self.pastebinProgressIndicator.stopAnimation(nil)
if pasteResponse.isEmpty {
self.pastebinButton.title = "Error"
} else {
self.pastebinButton.title = "Copied!"
}
}

DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2), execute: {
self.pastebinButton.title = "Pastebin"
self.pastebinButton.isEnabled = true
})

最佳答案

因此,您甚至在移出主线程之前就调用了 DispatchQueue.main.async。这是不必要的。此外,一旦您在后台线程上工作,您就会更新一些 UI(您的按钮标题),而无需分派(dispatch)回主线程。切勿在后台线程上更新 UI。

if !text.trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines).isEmpty {

self.pastebinButton.title = ""
self.pastebinProgressIndicator.startAnimation(nil)

pastebinAPI.postPasteRequest(urlEscapedContent: urlEscapeText(txt: text)) { pasteResponse in

// Clean up your DispatchQueue blocks
DispatchQueue.main.async {
self.pastebinProgressIndicator.stopAnimation(nil)
if pasteResponse.isEmpty {
self.pastebinButton.title = "Error"
} else {
self.pastebinButton.title = "Copied!"
}
}

DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(2), execute: {
self.pastebinButton.title = "Pastebin"
self.pastebinButton.isEnabled = true
})

}
} else {
Utility.playFunkSound()
}

关于swift - UI 快速更改,CoreAnimation : warning, 删除了未提交 CATransaction 的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652726/

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