调用 stroyboard 中控件 App crash

概述

App 中调用 storyboard 中添加的 tableView , App crash,提示说 tableView 为 nil

备注:
storyboard名称:someViewController.storyboard
storyboard 对应 class:someViewController.swift
someViewController.storyboard 中拖入了一个 tableView,然后在 someViewController.swift 中 control-鼠标左键 添加了对应的 @IBOutlet weak var mainTableView: UITableView!

分析

代码中是直接通过 UIViewController 初始化得到的 VC,然后在 VC 中的 viewDidLoad() 中调用 tableView。此时 storyboard 还未被初始化 ,对应的 tableView 当然为 nil

解决

获取 VC 应该通过 storyboard,不应该直接 let vc = someViewController(),具体如下

func storyBoardViewController(vcName: String) -> UIViewController {
    let storyBoard = UIStoryboard.init(name: "someViewController", bundle: nil)
    let vc = storyBoard.instantiateViewController(withIdentifier: vcName)
    return vc
}

// 具体调用
let vc = storyBoardViewController(vcName: "vcId")

注意:instantiateViewController(withIdentifier:)中参数 identifier 为 storyboard 文件中 右边栏-show the identity inspector- identity- storyboard ID 设置的,如果不在 storyboard 文件中设置 对应的 ID,该方法会导致 App crash

你可能感兴趣的:(调用 stroyboard 中控件 App crash)