요약 :
모든 UI 조작은 문제를 방지하기 위해 메인 스레드에서 수행되어야합니다. 그렇게하지 않으면 메인 스레드 검사기 (XCode 9에서 새로 도입 된 디버깅 기능)가 런타임에 문제를 생성합니다. 따라서 결함과 런타임 경고를 피하기 위해 아래와 같이 Main Thread 블록에 코드를 래핑하십시오.
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
버전 이전의 Xcode 릴리스에서. 9에서는 메인 스레드와 관련된 경고가 콘솔 영역에 텍스트로 인쇄됩니다. 어쨌든 Edit Scheme 의 Diagnostic 설정에서 Main Thread Checker를 선택적으로 비활성화 ( 권장되지 않는 방법 ) 할 수 있습니다 .
설명:
Apple은 UIKit 및 UI 요소를 조작하는 기타 API에 대한 런타임에서 문제를 확인하기 위해 XCode 9에 새로운 디버깅 옵션을 도입했습니다. 주 스레드 블록없이 런타임에 UIKit API에서 UI 요소가 변경되면 UI 결함 및 충돌이 발생할 가능성이 높습니다. 주 스레드 검사기는 런타임에 이러한 문제를 잡기 위해 기본적으로 활성화되어 있습니다. 실제로 권장하지는 않지만 아래와 같이 Edit Scheme 창 에서 Main Thread Checker 를 비활성화 할 수 있습니다 .
이전 SDK 또는 프레임 워크가있는 경우 Xcode 9로 업데이트 할 때 일부 UIKit 메서드 호출이 Main Thread에서 래핑되지 않았으므로이 경고가 표시 될 수 있습니다. 최신 버전으로 업데이트하면 문제가 해결됩니다 (개발자가이를인지하고 수정 한 경우).
XCode 9 베타 릴리스 노트에서 인용 :
- Xcode 9의 새로운 기능 – 메인 스레드 검사기.
- 백그라운드 스레드에서 UI API 오용 감지 활성화
- 주 스레드에서 수행되지 않은 AppKit, UIKit 및 WebKit 메서드 호출을 감지합니다.
- 디버깅 중에 자동으로 활성화되며 체계 편집기의 진단 탭에서 비활성화 할 수 있습니다.
- 메인 스레드 검사기는 Swift 및 C 언어에서 작동합니다.
UIApplication.shared.registerForRemoteNotifications()
이 메인 스레드에서에 대한 호출을 래핑해야합니다 . :) 메인 스레드를 호출하는 방법을 구글하자 ...