无法将“NeuroCongress.celulaTableViewCell”(0x15836c)类型的值转换为“NeuroCongress.Evento”

Posted

技术标签:

【中文标题】无法将“NeuroCongress.celulaTableViewCell”(0x15836c)类型的值转换为“NeuroCongress.Evento”【英文标题】:Could not cast value of type 'NeuroCongress.celulaTableViewCell' (0x15836c) to 'NeuroCongress.Evento 【发布时间】:2016-08-23 13:13:27 【问题描述】:

当我将对象传递给 segue 时,出现此错误:

无法将“NeuroCongress.celulaTableViewCell”(0x15836c) 类型的值转换为“NeuroCongress.Evento”

//----------------- newTableViewController --------------------

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

        let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) as! celulaTableViewCell


        cell.titLabel?.text = evento[indexPath.row].titulo
        cell.subTitLabel?.text = evento[indexPath.row].localizacao

        return cell

    


    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) 
        // cria evento com o selecionado atual
        let evento = self.evento[indexPath.row]
        // envia evento criado acima como sender para o segue detailSegue
        self.performSegueWithIdentifier("detailSegue", sender: evento)


    

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) 

        let detailVC = segue.destinationViewController as! DetailViewController
        // envia objeto que veio via sender do didselectrow como objeto Friend para a VC FriendDetail
        detailVC.eventozinho = sender as! Evento


    

//----------------- DetailViewController --------------------

import UIKit

class DetailViewController: UIViewController 

    @IBOutlet weak var lblTitulo: UILabel!
    @IBOutlet weak var lblInicio: UILabel!
    @IBOutlet weak var lblFim: UILabel!
    @IBOutlet weak var lblLocal: UILabel!
    @IBOutlet weak var lblPais: UILabel!
    @IBOutlet weak var lblContato: UILabel!
    @IBOutlet weak var lblAssunto: UILabel!

    @IBOutlet weak var lblWeb: UILabel!
    @IBAction func btnAbrir(sender: AnyObject) 

        openWebPage(self.eventozinho.website)

    

    var eventozinho = Evento()



    override func viewDidLoad() 
        super.viewDidLoad()

        self.lblTitulo.text = self.eventozinho.titulo

        self.lblInicio.text = String(self.eventozinho.dtinicio!)
        self.lblFim.text = String(self.eventozinho.dttermino!)

        self.lblLocal.text = self.eventozinho.localizacao
        self.lblPais.text = self.eventozinho.pais

        self.lblWeb.text = self.eventozinho.website

        self.lblAssunto.text = self.eventozinho.assunto
        self.lblContato.text = self.eventozinho.contato

【问题讨论】:

【参考方案1】:

我怀疑您已经通过从表格视图单元原型拖动到 DetailViewController 来在情节提要中创建了转场。因此,当您点击单元格时会自动触发 segue - 在这种情况下,sender 参数是被点击的单元格。因此出现错误:您的 prepareForSegue 假定 sender 参数是Event,但它实际上是单元格。如果这样设置segue,就不需要使用didSelectRowAtIndexPath来触发segue了。实际上,prepareForSegue 在调用didSelectRowAtIndexPath 方法之前运行。您可以修改prepareForSegue 以使用indexPathForCell(传递sender - 您可能需要正确转换它)来确定正确的indexPath(以及因此将哪个事件传递给目标视图控制器)。

或者,在您的故事板中删除 segue 并通过从视图控制器本身(使用场景顶部的图标)拖动到 DetailViewController 来重新创建它。在这种情况下,您当前的代码应该可以工作 - didSelectRowAtIndexPath 代码将运行并触发 segue,将事件作为发送者传递。

【讨论】:

谢谢你,你就是那个人。

以上是关于无法将“NeuroCongress.celulaTableViewCell”(0x15836c)类型的值转换为“NeuroCongress.Evento”的主要内容,如果未能解决你的问题,请参考以下文章

无法将 createdAt 和 updatedAt 保存为日期时间值,也无法将后端保存为前端

C# 无法将类型为“System.Byte[]”的对象强制转换为类型“System.Data.DataTable

无法将类型为“System.Collections.Generic.List`1[EPMS.Domain.SingleItem]”的对象强制转换为类型“EPMS

无法将 .json 文件从 CSV 下载到 JSON 转换并且无法将 JSON 转换为 CSV

无法将 ReactiveUI 添加到 NUnit 测试项目

“无法将图像数据写入路径” - Laravel 图像干预