【问题标题】:Could not cast value of type 'UITableViewCell' to '(AppName).(CustomCellName)'无法将“UITableViewCell”类型的值转换为“(AppName)。(CustomCellName)”
【发布时间】:2015-06-30 23:21:05
【问题描述】:

我目前正在尝试使用 xCode 6.3 swift 1.2 创建自定义表格视图单元格。由于 cellforRowAtIndexPath 方法中的某种原因,我似乎无法设置我的单元格变量。代码会编译,但是当这行代码命中时:

    var cell:MessageCell = tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCell

我收到此错误:无法将“UITableViewCell”(0x1112f5a18)类型的值转换为“CampusExchange.MessageCell”(0x10e8318f0)。

这是我的完整方法:(如果您想知道我如何设置消息,我正在使用 Parse)

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    var cell:MessageCell = tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCell

    let message = messagesArray[indexPath.row]["Message"] as? String
    cell.messageOutlet.text = message
    return cell
}

感谢您提供的任何帮助。我似乎无法让它工作。

【问题讨论】:

  • 您似乎没有在情节提要中为原型单元设置自定义类
  • 我已经设置好了。但由于某种原因,它不起作用。随机工作的是删除我的单元格的自定义类。然后构建,使应用程序崩溃,然后返回并重置自定义类。现在它似乎工作了。感谢您为我指明正确的方向!
  • 同样,我设置了自定义类,但它仍然给了我这个错误。我只是单击该字段并按 Enter 键,以轻推它,然后它就起作用了。可能是 Xcode 错误?

标签: ios swift xcode uitableview cocoa-touch


【解决方案1】:

在这种情况下,您可以检查几件事:

  1. 查看你的表是否链接到你的班级,通常是@IBOutlet weak var tableView: UITableView!

  2. 注册自定义表格视图单元格:self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell") 请注意,即使您的自定义单元格具有不同的类和 id,您也要使用“UITableViewCell”和标识符“cell”。

  3. 在 cellForRowAtIndexPath 中将单元格出列:let cell: MessageCell = self.tableView.dequeueReusableCellWithIdentifier("messageCell") as! MessageCell 现在您使用正确的单元格标识符。

【讨论】:

  • 在我的特殊情况下,代码是正确的,但在我创建 UITableviewCell 的情节提要中,我忘记使用 UITableViewCell 的检查器设置我的自定义类。在自定义类下的检查器中,当它应该说“UserInfoCell”时它仍然说“UITableViewCell”,这是我创建的自定义子类的名称。
  • 第2点。帮了大忙。谢谢!
  • 第 2 点也是我的问题!这是至关重要的,因为对于普通的 tableview 控制器,没有指定要注册的单元格,因此假设重用标识符应该用于两个地方是相当直观的。我花了很长时间才找到这个答案。非常感谢
  • 添加我自己说第 2 点非常有帮助。非常感谢!
  • 你不需要以编程方式完成所有这些步骤,你有故事板,检查developer.apple.com/library/archive/referencelibrary/…
【解决方案2】:

viewDidLoad() 方法中注册您的CustomCell:

self.tableView.register(CustomCell.self, forCellReuseIdentifier: "Cell")

【讨论】:

  • 这解决了我的问题。谢谢
【解决方案3】:

我有同样的问题,我为单元设置了自定义类但忘记设置模块

像这样选择模块后,它工作了

【讨论】:

  • 这已为我解决了!
【解决方案4】:

在 viewDidLoad() 中

// register custom table view cell from nib
self.tableView.registerNib(UINib(nibName: "MessageCell", bundle: nil), forCellReuseIdentifier: "messageCell")

【讨论】:

    【解决方案5】:

    X 代码 9.4
    与此处的流行答案之一不同,此解决方案使用自定义 tableview 单元格解决了我的噩梦。如果您使用的是故事板并且所有内容都正确连接,那么您不必在 viewDidLoad 中注册自定义 tableView 单元格。

    从 viewDidLoad 中删除:
    self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")

    【讨论】:

      【解决方案6】:

      我也收到了同样的错误信息。但对我来说,问题是我没有在界面生成器中设置自定义单元格的类。

      【讨论】:

        【解决方案7】:

        就我而言,我没有更改 UITableViewCell 类。最初它是 DetailsTableViewCell 类,但我删除并添加了名为 TableViewCellClass 的新类。但是这里忘记改单元格类名了。

        再次检查并更改此处的 TableViewCell 类名见下面的屏幕截图

        【讨论】:

          【解决方案8】:

          保持自定义单元类名称和单元 id 相同:

             self.tableView.register(CustomCell.self, forCellReuseIdentifier: "CustomCell")
          

          【讨论】:

            【解决方案9】:

            首先,我建议您使用 CocoaClass 重新创建您的单元类。我有非常相似的错误——我创建了一个 CollectionViewCell,当我意识到我的错误时,我决定简单地重命名父类。但是,编译器没有发现任何错误,我在构建过程中遇到了这个错误。

            【讨论】:

              【解决方案10】:

              Swift 3 语法:

              self.tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
              

              【讨论】:

                【解决方案11】:

                我有同样的错误。正如obo2O 在他的评论中所说,他的解决方案对我有用:

                1. 转到界面生成器
                2. 点击相关故事板
                3. 点击表格视图中的相关单元格
                4. 在实用程序面板(右侧)中,单击“显示识别检查器”图标
                5. 在“自定义类”部分 -> “类”字段中,将类设置为其他任何值并运行应用程序。应用程序崩溃,因为 classX 无法转换为 classY
                6. 在“自定义类”部分 -> “类”字段中,将类设置为正确的类并重新运行。

                【讨论】:

                  【解决方案12】:

                  使用cocoaClass 重新创建您的课程并选择UItableViewCell

                  我遇到了同样的问题,这对我有用。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-09-08
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多