Swift 偶发诡异问题解决:控制器子视图指针地址改变

2020-05-17  本文已影响0人  SoaringHeart

当控制器在 ViewDidLoad 添加子视图 懒加载 tableView 时,tableView 指针和 view.subViews 中的指针地址相同,但是在 viewWillAppear 方法中 tableView 指针地址发生改变,但是 view.subViews 仍然只有一个视图,此时移除 tableView,view.subViews 会为空,目前不清除是因为 pod 库导致的问题还是项目中第三方库导致的问题或者是 swift 在特定情形下的问题,但是问题还是必须解决,思路:直接刷新 view.subViews 中的表视图即可。

开始实现获取 tableView:

public func subTableView() -> UITableView?{
    for e in self.subviews.enumerated() {
        if let tableView = e.element as? UITableView {
            return tableView
        }
    }
    return nil
}
//然后: 
subTableView()?.reloadData()

发现功能是实现了,但是代码有点丑,不够优雅,继而优化,最终实现如下:将

lazy var tableView: UITableView = {
    let view: UITableView = UITableView.create(self.view.bounds, style: .grouped, rowHeight: 50)
    view.dataSource = self
    view.delegate = self

    return view
}()

修改为:

lazy var tableView: UITableView = {
    guard let tableView = view.subView(UITableView.self) as? UITableView else {
        let view = UITableView.create(self.view.bounds, style: .plain, rowHeight: 50)
        view.dataSource = self
        view.delegate = self
        return view
    }
    return tableView
}()

完美解决!
(开发中随着项目的越来越大,总会遇到各种各样的问题,你可以找不到原因,但你必须能解决问题,即使谷歌都搜不到这样的问题。)

上一篇下一篇

猜你喜欢

热点阅读