web-dev-qa-db-ja.com

DispatchQueue:非メインスレッドでasCopy = NOで呼び出すことはできません

メインスレッドで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)
}

以前にコンソールにメッセージを表示していた理由は何ですか?

16
Amit

メインキューの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)
    }
}
32
Ilya Kharabet