iOS开发知识小集

Xcode10.2 继承UITableView协议失效

2019-07-18  本文已影响120人  我只不过是出来写写代码

万万没想到原因居然是 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 ......

上一篇下一篇

猜你喜欢

热点阅读