我在主线上呈现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)

我得到了正确的输出.

但在控制台中,我得到了以下信息:

在非主线程上,不能使用asCopy=NO调用[Assert].

是我做错了什么,还是我可以忽略这个信息?

Edit

感谢@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)
    }
}

Swift相关问答推荐

如何设置两个不同的视图模型以在我的SwiftUI应用程序中使用相同的数据源?

带有文本输入自动大小写修饰符的SwiftUI Textfield问题

通常从数组调用的SWIFT静态协议函数

UICollectionViewCompostionalLayout Collectionview单元格宽度在重新加载数据后未正确调整大小

如何偏移HStack中的视图,但仍然约束框架以与偏移匹配?

如何将多个完成处理程序转换为异步?

为什么 Swift URL 的 init?(string: String,relativeTo: URL?) 仅添加协议?

Xcode 15 Beta中如何使用@Observable?

在这个使用 URLSession 的简单 case 中是否创建了一个强引用循环?

在领域 SwiftUI 异常中使用 Apple 登录:无法识别的 Select 器发送到实例

Swift // Sprite Kit:类别位掩码限制

MacOS KIND 是如何实现的

如何裁剪图像 3:4 ?迅速

XCUITest 在 TearDown 期间随机失败-无法终止 com.bundle.id

为什么 Apple Scrumdinger Sample App 使用两个事实来源?

Reality Composer Tap Trigger 问题

在 Swift 中将两个字节的 UInt8 数组转换为 UInt16

从 NSData 对象在 Swift 中创建一个数组

用 UIBezierPath 画一条线

键盘显示时Tableview滚动内容