[Swift4] UI更新/バイブ再生はMain Threadで行う

ヒヨコアラーム作成中にエラーが発生して調べた結果を美貌で記載

実現しようとしたこと

・アプリバッググラウンド時にローカルプッシュを10個仕込む
・アプリフォアグラウンド時にローカルプッシュを取得し、10個未満だった時に
 UIAlertControllerでアラートを表示させつつ、バイブレーション/音声を鳴らす

エラー内容

ヒヨコアラーム[1758:521169] [Assert] Cannot be called with asCopy = NO on non-main thread.

ヒヨコアラーム[1758:521169] [Animation] +[UIView setAnimationsEnabled:] being called from a background thread. Performing any operation from a background thread on UIView or a subclass is not supported and may result in unexpected and insidious behavior. trace=(XXXXXX(略))

エラー時のコード内容

原因

エラー内容を見る限り、アニメーションを含むUI更新はMain Threadで行わないといけないとのこと。
※音声再生やバイブレーションも作動しなかったのでその類に含まれるらしい

つまり、alarmSounds()にそういった更新内容が含まれているのであれば、Main Threadで行ってあげないといけない

最終的に修正したコード内容

一応これで解決


お知らせ

ヒヨコ歩数計という歩きながらヒヨコが育っていくアプリを作って、いろんな方に結構使ってもらっています。
RealmSwift, Admobの動画・インステ・バナー広告、UICollectionView、iOS-Charts、UITableViewを使用しているので、是非ご利用ください!