iOS 12.2, Xcode10.2,Swift 5.0编译器 didSelectRow代理商方法出现重大BUG

作者 : 开心源码 本文共1717个字,预计阅读时间需要5分钟 发布时间: 2022-05-12 共224人阅读

一、最近新上架一款App,系统为iOS12.2,Xcode版本额10.2,Swift5.0编译器。使用和之前App相同的框架,发现重大BUG。

(1)正常的场景:当你像我一样使用Swift 4.2版本,封装了基类BaseTableViewController,在基类中创立TableView,并设置dataSourse = self ,delegate = self时。你可能会在基类中实现需要的数据源或者者代理商方法。比方:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {        return UITableView.automaticDimension    }            func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {        return 10    }        func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {        if section == 0 {            return 10        } else {            return 0.0001        }    }

这些方法你实现后,在后续继承与BaseTableViewController的类中,你需要使用重写该方法实现,这时不会出现问题。如下:

    override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {        return (90 * SCREENWIDTH / 375)    }        override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {    }

(2)出现问题的场景:
此时假如你在BaseTableViewController中没有实现的didSelectRow代理商方法,而在子类中也就不需要 override关键字,直接调用该代理商方法,如下:

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {    }

此时会出现这个代理商方法不会被调用的问题,无论你怎么操作,该代理商方法都不会出触发。并且,这种情况可能在dev模式下不会出现问题,但是在你使用Xcode 10.2进行打包之后,比方hoc包,安装到真机上就会出现问题,这时你很难找到是什么导致这个代理商方法不被触发的。
另外,假如你在dev模式安装测试之前,使用comman + shift + K 和 comman + shift + K + option 进行xcode清除,也可能会导致这个问题必先,假如不清除,可能该BUG不是必现的。个人猜测是由于缓存问题或者者编译不肯定使用的都是swift5.0编译器。
二、解决方法
解决方法,你在基类BaseTableViewController中,直接实现这个didSelectRow代理商方法,那么在子类中使用override关键字进行重写,就能处理这个BUG。
或者者你不在基类中调用,在子类中调用时候在该方法前添加@objc关键字,也能处理这个BUG。

子类中override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {    }或者@objc func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {    }

二、多方查阅文档,最后在官方BUG网站https://bugs.swift.org中发现,此问题是Swift 5.0 编译器的BUG,官方将在之后版本修复。暂时处理方法如上所述。
该BUG官方链接:https://bugs.swift.org/browse/SR-10257。希望能帮到各位小伙伴。

其余BUG目前正在查找中,欢迎分享交流。

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » iOS 12.2, Xcode10.2,Swift 5.0编译器 didSelectRow代理商方法出现重大BUG

发表回复