为啥我收到错误“类型‘PublicTableViewController’没有成员‘handleRefresh’’
Posted
技术标签:
【中文标题】为啥我收到错误“类型‘PublicTableViewController’没有成员‘handleRefresh’’【英文标题】:Why am I getting the error 'Type 'PublicTableViewController' has no member 'handleRefresh''为什么我收到错误“类型‘PublicTableViewController’没有成员‘handleRefresh’’ 【发布时间】:2020-12-23 21:54:01 【问题描述】:我正在尝试为我的UITableViewController
快速执行拉取以重新加载,这是我的代码:
class PublicTableViewController: UITableViewController
override func viewDidLoad()
super.viewDidLoad()
...
self.refreshControl?.addTarget(self, action: #selector(PublicTableViewController.handleRefresh(_:)), for: UIControl.Event.valueChanged)
func handleRefresh(refreshControl: UIRefreshControl)
self.tableView.reloadData()
refreshControl.endRefreshing()
...
但是当我构建这个时,我得到了 Type 'PublicTableViewController' has no member 'handleRefresh'' 的错误,我不明白为什么。
【问题讨论】:
你需要用@objc注释它才能与#selector一起使用,@objc func handleRefresh...
如前所述不要忘记匹配参数,但你真的需要一个参数,因为你似乎没有使用它吗?
【参考方案1】:
选择器中指定的函数签名与您的实际函数不同。
或者,将您的功能更改为:
@objc func handleRefresh(_ refreshControl: UIRefreshControl)
self.tableView.reloadData()
并保持您的选择器不变。
或将您的选择器更改为:
self.refreshControl?.addTarget(self, action: #selector(PublicTableViewController.handleRefresh(refreshControl:)), for: .valueChanged)
并保持你的功能不变。
提示:当您编写选择器并点击PublicTableViewController
之后的点时,Xcode 将自动建议正确的函数签名;)
【讨论】:
【参考方案2】:像这样改变。
class PublicTableViewController: UITableViewController
override func viewDidLoad()
super.viewDidLoad()
...
self.refreshControl?.addTarget(self, action: #selector(self.handleRefresh()), for: UIControl.Event.valueChanged)
@objc func handleRefresh()
self.tableView.reloadData()
您必须在方法 sing 中添加 @objc 才能采用 #selector。
【讨论】:
我添加了它并得到了相同的结果 不带参数试试以上是关于为啥我收到错误“类型‘PublicTableViewController’没有成员‘handleRefresh’’的主要内容,如果未能解决你的问题,请参考以下文章
为啥我收到 AbstractDynamicObject$CustomMessageMissingMethodException 错误?