警告内容
通知の許可アラートを表示するコードで、紫で以下のような警告が表示された。
UIApplication.registerForRemoteNotifications() must be used from main thread only
原因
原因は、UIApplication.registerForRemoteNotifications()
をメインスレッドで実行していなかったから。
ちなみに、紫のエラーは、Xcode 9で新しく導入されたデバッグ機能(メインスレッドチェッカー)で、UI操作をメインスレッドで実行していない場合に起きる警告らしい。
対応方法
DispatchQueue.main.async {
で囲うことで、メインスレッドで実行できるので以下のように修正する。
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) { (granted, _) in if granted { DispatchQueue.main.async { UNUserNotificationCenter.current().delegate = self } } }
参考文献