Swift 5调用self.displayAlert报错:ViewController无该成员
报错原因
这个错误的触发逻辑非常直接:你当前使用的ViewController类中,没有定义名为displayAlert(withTitle:message:)的实例方法,但业务代码里多次调用了这个不存在的方法,Xcode无法找到对应的方法实现就会抛出该错误。
大部分Back4App的登录注册入门示例中,会默认开发者已经提前实现了这个封装系统弹窗的工具方法,如果你只抄了登录注册的业务逻辑、漏写了弹窗方法的实现,就会碰到这个报错。
修复方案
你只需要在ViewController类内部,和signin、signup两个点击事件方法平级的位置,补上displayAlert方法的实现即可,参考实现代码如下:
func displayAlert(withTitle title: String, message: String) { // 网络回调默认在后台线程执行,所有UI操作必须切回主线程,避免弹窗异常 DispatchQueue.main.async { let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert) let confirmAction = UIAlertAction(title: "OK", style: .default) alertController.addAction(confirmAction) self.present(alertController, animated: true) } }
实现注意事项
- 方法必须写在
ViewController的类作用域内,不能嵌套在signin、signup或者其他方法的函数体、闭包内部,否则类依然无法识别到该方法。 - 方法的参数标签要和调用处完全匹配:外部参数名固定为
withTitle和message,如果参数名书写错误,同样会触发找不到成员的报错。 - 必须添加主线程调度逻辑:Back4App的网络请求回调默认运行在后台子线程,直接在子线程执行UI弹窗操作会触发系统警告,甚至出现弹窗延迟、不弹出的问题。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

