美文网首页iOS开发知识小集
Xcode10.2 继承UITableView协议失效

Xcode10.2 继承UITableView协议失效

作者: 我只不过是出来写写代码 | 来源:发表于2019-07-18 18:43 被阅读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 ......

    相关文章

      网友评论

        本文标题:Xcode10.2 继承UITableView协议失效

        本文链接:https://www.haomeiwen.com/subject/jpzllctx.html