为啥我收到错误“类型‘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’’的主要内容,如果未能解决你的问题,请参考以下文章

为啥我收到“无法解析 NSPredicate”错误

为啥我收到 AbstractDynamicObject$CustomMessageMissingMethodException 错误?

为啥我收到错误“尝试打开未关闭的连接。”?

为啥我收到“由于保护级别而无法访问”错误?

为啥我收到的 jwt 格式错误?

为啥我收到 Laravel php artisan 迁移错误?