TL; DR:
Alle UI-Manipulationen sollten im Haupt-Thread durchgeführt werden, um Probleme zu vermeiden. Andernfalls führt der Main Thread Checker (neu eingeführte Debugging-Funktion in XCode 9) zur Laufzeit zu Problemen. Wickeln Sie Ihren Code also wie unten beschrieben in den Haupt-Thread-Block ein, um Störungen und Laufzeitwarnungen zu vermeiden.
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
In Xcode-Releases vor ver. In 9 werden die Warnungen in Bezug auf den Haupt-Thread im Konsolenbereich in Textform gedruckt. Auf jeden Fall können Sie den Haupt-Thread-Checker in den Diagnoseeinstellungen im Bearbeitungsschema optional deaktivieren ( kein empfohlener Ansatz ) .
Erläuterung:
Apple hat in XCode 9 eine neue Debugging-Option eingeführt, mit der Probleme bei Runtime for UIKit und anderen APIs, die Benutzeroberflächenelemente bearbeiten, überprüft werden können. Wenn zur Laufzeit Änderungen an den UI-Elementen von der UIKit-API ohne einen Hauptthreadblock vorgenommen werden, ist es sehr wahrscheinlich, dass UI-Störungen und Abstürze auftreten. Der Haupt-Thread-Checker ist standardmäßig aktiviert, um diese Probleme zur Laufzeit zu erkennen. Sie können die Haupt-Thread-Prüfung im Fenster " Schema bearbeiten" wie unten beschrieben deaktivieren , obwohl dies nicht unbedingt empfohlen wird:
Wenn Sie ältere SDKs oder Frameworks haben, wird beim Aktualisieren auf Xcode 9 möglicherweise diese Warnung angezeigt, da einige der UIKit-Methodenaufrufe nicht in den Hauptthread eingeschlossen worden wären. Das Aktualisieren auf die neueste Version würde das Problem beheben (wenn der Entwickler davon Kenntnis hat und es behoben hat).
Zitat aus den Beta-Versionshinweisen zu XCode 9:
- Neu in Xcode 9 - Main Thread Checker.
- Aktivieren Sie die Erkennung von UI-API-Missbrauch im Hintergrund-Thread
- Erkennt AppKit-, UIKit- und WebKit-Methodenaufrufe, die nicht im Hauptthread ausgeführt werden.
- Wird beim Debuggen automatisch aktiviert und kann auf der Registerkarte Diagnose des Schema-Editors deaktiviert werden.
- Der Haupt-Thread-Checker funktioniert mit den Sprachen Swift und C.
UIApplication.shared.registerForRemoteNotifications()
in den Hauptthread einschließen. :) Lassen Sie Google, wie man es im Haupt-Thread nennt ...