无法投射类型' UITableViewCell'到' ProjectName.UserCell'

时间:2017-11-14 16:59:18

标签: ios swift xcode9

嘿伙计们,因为你们将此标记为副本,请听我说。我尝试了与此主题相关的所有内容,包括添加

self.tableView.registerClass(UserCell.self,forCellReuseIdentifier:" cell")

我还更改了占位符单元格以匹配UserCell类

view with placeholder cell changed to UserCell

我不确定它可能是什么!我收到错误:

无法转换类型' UITableViewCell' (0x1134700e0)到' Lightning_Chat.UserCell'

类型SIGBRT不确定会发生什么,我已尝试过一切请帮助!

这是表视图代码:

  public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    // not casting for some reason 
    let cell : UserCell =  UITableViewCell(style: .subtitle , reuseIdentifier: "cellId") as! UserCell

    cell.textLabel?.text = contacts[indexPath.row].userName
    cell.detailTextLabel?.text = contacts[indexPath.row].score


    if let profileImageUrl = contacts[indexPath.row].picURL {
        let url = URL(string: profileImageUrl)
        URLSession.shared.dataTask(with: url!, completionHandler: { (data, response, error) in


            //download hit an error
            if error != nil {
                print(error!)
                return
            }
            DispatchQueue.main.async {
                cell.profileImageView.image = UIImage(data: data!)

            }

        }).resume()
    }


    return cell;
}

这是我的观点确实加载:

override func viewDidLoad() {
    super.viewDidLoad()

    self.tableView.register(UserCell.self, forCellReuseIdentifier: "cellId")

    //irrelevant 
    fetchUsers()
}

3 个答案:

答案 0 :(得分:2)

而不是:

let cell : UserCell =  UITableViewCell(style: .subtitle , reuseIdentifier: "cellId") as! UserCell

试试这个:

let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! UserCell

答案 1 :(得分:1)

您没有正确创建单元格。

变化:

let cell : UserCell =  UITableViewCell(style: .subtitle , reuseIdentifier: "cellId") as! UserCell

为:

let cell = tableView.dequeueReusableCell(withIdentifier: "cellId", for: indexPath) as! UserCell

请注意,您的代码是直接创建UITableViewCell,这就是您无法投射它的原因。您也绕过了标准单元重用。

答案 2 :(得分:-1)

以下是修复问题的步骤

  1. 将您的表格视图内容更改为动态单元格,而不是静态单元格
  2. 维护viewDidLoad函数self.tableView.register(UserCell.self,forCellReuseIdentifier:" cellId")的代码。另外,不要忘记连接表视图委托和数据源
  3. 在您的表视图上查看cellForRowAt索引路径方法,不要直接实例化该单元格。而是使用let cell = self.tableView.dequeueReusableCell(withIdentifier:cellIdentifier)!;
  4. 基本上你得到的错误是因为混合并匹配表视图中的错误属性。

    希望有所帮助