文章目录
  1. 1. tableView.registerClass in swift is fatal error
    1. 1.1. fatal error: array cannot be bridged from Objective-C

tableView.registerClass in swift is fatal error

  • 注册cell时会出问题,但是注册一个cell时应该和原类没关系吧,我特意新建了一个工程进行测试,没有问题。那很可能就是这个工程有问题。但是问题在哪呢?
  • 姑且认为在注册cell的上下文
  • 分析
    • 首先SLQHomeTableViewController继承自SLQBaseTableViewControllerSLQBaseTableViewController 继承自UITableViewController
    • 其次在SLQHomeTableViewControllerviewDidLoad方法中进行cell的注册没有问题(问题就在这里)
    • 为什么位注册失败
  • 结果1
    • 直接将 SLQHomeTableViewController 的父类换成 UITableViewController 注册cell没有问题
    • 还是不行
  • 结果2

    • 重新写了一遍,还是出问题
    • 问了下大牛,才知道原来是上一步中有一个判断没有return,导致tableView没有创建,所以注册会出问题。 - 主要那个if语句没有返回,本意是判断一下是否登录,如果没有登录就显示默认界面,这样的话UITableView就没有创建,注册当然会出问题。

       override func viewDidLoad() {
      super.viewDidLoad()
      // 1.如果没有登录, 就设置未登录界面的信息
      if !userLogin
      {
      defaultVistorView?.setupVisitorInfo(true, imageName: "visitordiscover_feed_image_house", message: "关注一些人,回这里看看有什么惊喜")
      return
      }
      // 2.初始化导航条
      setupNav()
      // 3、注册cell
      tableView.registerClass(StatusNormalTableViewCell.self, forCellReuseIdentifier: StatusTableViewCellIdentifier.NormalCell.rawValue)
      tableView.registerClass(StatusForwardTableViewCell.self, forCellReuseIdentifier: StatusTableViewCellIdentifier.ForwardCell.rawValue)
      tableView.separatorStyle = UITableViewCellSeparatorStyle.None
      // 显示刷新控件
      refreshControl = HomeRefreshControl()
      refreshControl?.addTarget(self, action: "loadData", forControlEvents: UIControlEvents.ValueChanged)
      // 4、加载微博数据
      loadData()
      }
  • 下面的stackflow上得问题

    I use Xcode7

    i register the cell in viewDidLoad()

    let SLQHomeTableViewCellID = "SLQHomeTableViewCellID"
    self.tableView.registerClass(SLQStatusCell.self, forCellReuseIdentifier: SLQHomeTableViewCellID)
    then the dataSouce like below:

    // MARK: - Table view data source
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    // #warning Incomplete implementation, return the number of rows
    return statuses?.count ?? 0
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier(SLQHomeTableViewCellID, forIndexPath: indexPath) as! SLQStatusCell
    let status = statuses![indexPath.row]
    cell.status = status
    return cell
    }
    i also override init()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
    super.init(style: style, reuseIdentifier: reuseIdentifier)
    // 初始化UI
    setupUI()

    }
    but when i run in simulator ,it's a fatal error in register cell ,this line is the error appeared

    self.tableView.registerClass(SLQStatusCell.self, forCellReuseIdentifier: SLQHomeTableViewCellID)

    fatal error: unexpectedly found nil while unwrapping an Optional value
    i want to why,i run the program in using OC is all right.

fatal error: array cannot be bridged from Objective-C

  • 将一个[UIImage]数组传递到一个[UIImage?]时爆出这个错误
  • 解决方法
    • 显示指出数组的类型
      let images: [UIImage?] = photoSelectorVC.pictureImages
文章目录
  1. 1. tableView.registerClass in swift is fatal error
    1. 1.1. fatal error: array cannot be bridged from Objective-C