メインスレッドでUIAlertController
を次のように表示しています。
class HelperMethodClass: NSObject {
class func showAlertMessage(message:String, viewController: UIViewController) {
let alertMessage = UIAlertController(title: "", message: message, preferredStyle: .alert)
let cancelAction = UIAlertAction(title: "Ok", style: .cancel)
alertMessage.addAction(cancelAction)
DispatchQueue.main.async {
viewController.present(alertMessage, animated: true, completion: nil)
}
}
}
そして、私はUIViewController
からメソッドを次のように呼び出しています:
HelperMethodClass.showAlertMessage(message: "Any Message", viewController: self)
出力を適切に取得しています。
しかし、コンソールでは次のメッセージが表示されます:
[Assert]非メインスレッドではasCopy = NOで呼び出すことはできません。
ここで間違ったことをしたか、このメッセージを無視できますか?
編集
@NicolasMiariに感謝します。
以下のコードを追加してもメッセージは表示されません。
DispatchQueue.main.async {
HelperMethodClass.showAlertMessage(message: "Any Message", viewController: self)
}
以前にコンソールにメッセージを表示していた理由は何ですか?
メインキューのshowAlertMessage
からすべてのコードを呼び出す必要があります。
class func showAlertMessage(message:String, viewController: UIViewController) {
DispatchQueue.main.async {
let alertMessage = UIAlertController(title: "", message: message, preferredStyle: .alert)
let cancelAction = UIAlertAction(title: "Ok", style: .cancel)
alertMessage.addAction(cancelAction)
viewController.present(alertMessage, animated: true, completion: nil)
}
}