我相对较新,并且想知道是否有人可以帮助解决这个问题。
我正在尝试在服务调用期间将按钮上的标签更改为加载微调器,然后在不久之后更改为该调用的响应消息。
我在日志中收到此错误:
CoreAnimation: warning, deleted thread with uncommitted CATransaction; set CA_DEBUG_TRANSACTIONS=1 in environment to log backtraces.
感谢您的帮助。我已经读过这些核心动画错误,但我不确定我做错了什么,因为这里的所有内容都是异步完成的。
这是更正的代码,谢谢@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
})
答案 0 :(得分:1)
所以,在你移出主线程之前,你正在调用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()
}
。这是不必要的。此外,一旦您在后台线程上工作,您将更新一些UI(您的按钮标题)而不会调度回主线程。永远不要在后台线程上更新UI。
{{1}}