Xcode10.2 继承UITableView协议失效

万万没想到原因居然是 Xcode10.2.1 的 bug

 前言:在这次App版本迭代进入集成测试阶段尾声,正式环境打包release环境后,测试回归发现许多包含 tableView 的页面都无法响应点击事件。但是在 debug 环境下从开发功能到滚动测试流程,一直都是没问题的。开始时,真的是百思不得其解


开发环境:

Xcode10.2.1 swift 5.0
涉及的类关系:
父类:BaseTableViewController 拥有成员变量 UITableView
子类:SubTableViewController 继承自 BaseTableViewController
父类遵循 UITableViewDelegate 与 UITableViewDataSource 代理,由子类 SubTableViewController 覆写实现具体的代理方法。

问题症结:

  1. debug 模式下真机与模拟器调试,遵循的代理方法都可以正常执行;
  2. release 模式打包出来后,子类中覆写的 TableView 相关协议 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath)func numberOfSections(in tableView: UITableView) 方法无法正常执行,导致页面显示错误与点击事件无响应;

问题原因:

Xcode 10.2 版本打包编译 bug。在查阅了大量的资料后,最终得出了这个怎么也没想到的结果。
从官方论坛的 bug 反馈中,找到了证据:Inference of @objc from witnessed protocol requirement fails sometimes

解决方案:

  1. 使用 Xcode 10.1 打包上线(若使用 swift 5 版本,此方案无效);xcode 10.2.1 swift UITableView部分协议方法不执行
  2. 在子类中要覆写代理实现的方法前,添加 @objc ;Xcode 10.2 protocol inheritance issue
  3. 父类不再遵循 UITableView 相关代理,改由子类去遵循并实现

后续更新

Apple官方声明该 bug 在 swift 5.1中已被修复swift bug反馈链接

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,140评论 1 32
  • UITableView作为iOS布局的重要组成部分,需要我们对它有一个比较升入和全面的认识。 首先,UITable...
    Jackie_123阅读 676评论 0 2
  • 1.badgeVaule气泡提示 2.git终端命令方法> pwd查看全部 >cd>ls >之后桌面找到文件夹内容...
    i得深刻方得S阅读 4,752评论 1 9
  • 前日晌午,于料峭寒风中依依送别女儿女婿及外孙回女儿婆家后,便开道奇穿海底隧道回至父母家中。 当晚,陪父亲聊天至凌晨...
    紫玉冰凌阅读 164评论 0 1
  • 【模型名称】 讨喜偏误 【模型说明】 你是否曾因遇到一位衣着得体,妆容精致的柜姐,而买下了从未买过的高价化妆品?身...
    zerocards阅读 623评论 0 4