Ami*_*mit 20 grand-central-dispatch swift dispatch-queue swift4.2
我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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我从任何方面调用方法UIViewController
:
HelperMethodClass.showAlertMessage(message: "Any Message", viewController: self)
Run Code Online (Sandbox Code Playgroud)
我正确地得到了输出.
但在控制台中,我收到以下消息:
[Assert]在非主线程上无法使用asCopy = NO调用.
我在这里做错了什么,或者我可以忽略这个消息?
编辑
感谢@NicolasMiari:
添加以下代码不会显示任何消息:
DispatchQueue.main.async {
HelperMethodClass.showAlertMessage(message: "Any Message", viewController: self)
}
Run Code Online (Sandbox Code Playgroud)
之前它在控制台中显示消息的原因是什么?
Ily*_*bet 41
您应该从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)
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
14917 次 |
最近记录: |