1
的Xcode 8.2.1/MacOS的10.12.4測試這是什麼原因造成的? - 「CoreAnimation:警告,已刪除的主題有未提交CATransaction」
我試圖理解一個錯誤我越來越:
CoreAnimation: warning, deleted thread with uncommitted CATransaction; set CA_DEBUG_TRANSACTIONS=1 in environment to log backtraces, or set CA_ASSERT_MAIN_THREAD_TRANSACTIONS=1 to abort when an implicit transaction isn't created on a main thread.
我有在該發送網絡請求迅速文件代碼塊,檢索一些數據,併發佈一個通知之前對其進行處理:
// global variable
var data: [String: Any] = [:]
func requestData() {
...
do {
// process data
data = processedData
NotificationCenter.default.post(name: didProcessData, object: nil)
}
} catch {
...
}
以我主ViewController.swift文件,觀察者偵聽通知和更新視圖。
func updateView() {
// update the view
textField.stringValue = "..."
}
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(updateView), name: didProcessData, object: nil)
}
當updateView()
被調用時,實際的文本字段和這種利用一個隨機時間以實際更新,和前面提到的錯誤出現。
我的猜測是,有與線程安全的問題,所以我改變updateView()
像這樣:
func updateView() {
DispatchQueue.main.async(execute: {
// update the view
self.textField.stringValue = "..."
})
}
現在正確的視圖更新。但是我仍然對編程相對缺乏經驗,並且我不太明白導致錯誤的原因。
選中此:https://www.quora.com/Iphone-why-update-UI-always-on-Main-Thread –