Xcode 8.2.1/macOS 10.12.4 betaWas verursacht das? - "Coreanimation: Warnung, gelöscht Gewinde mit ungebundener CATransaction"
Ich versuche, einen Fehler zu verstehen, ich bin immer:
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.
Ich habe ein Code-Block in einem schnellen Datei, die eine Netzwerkanfrage sendet, einige Daten abruft und verarbeitet sie, bevor sie eine Meldung veröffentlichen:
// global variable
var data: [String: Any] = [:]
func requestData() {
...
do {
// process data
data = processedData
NotificationCenter.default.post(name: didProcessData, object: nil)
}
} catch {
...
}
in meinem Haupt ViewController.swift Datei, hört ein Beobachter für die Meldung und aktualisiert die Ansicht .
func updateView() {
// update the view
textField.stringValue = "..."
}
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(updateView), name: didProcessData, object: nil)
}
Wenn updateView()
wird, die eigentlichen Textfelder genannt und eine solche unbestimmter Zeit nehmen, um tatsächlich zu aktualisieren, und die oben genannte Fehlermeldung angezeigt.
Meine Vermutung war, dass es ein Problem mit Thread-Sicherheit war, so änderte ich updateView()
wie so:
func updateView() {
DispatchQueue.main.async(execute: {
// update the view
self.textField.stringValue = "..."
})
}
Und nun die Ansicht aktualisiert richtig. Aber ich bin noch relativ unerfahren in der Programmierung, und ich verstehe nicht genau, was genau den Fehler verursacht.
Überprüfen Sie dies: https://www.quora.com/Iphone-why-update-UI-always-on-Main-Thread –