当我将对象传递给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
答案 0 :(得分:1)
我怀疑你是通过从表格视图单元格原型拖动到DetailViewController而在故事板中创建了segue。因此,当您点击单元格时会自动触发segue - 在这种情况下,sender
参数是被点击的单元格。因此错误:您的prepareForSegue假定sender参数是Event
,但它实际上是单元格。如果以这种方式设置segue,则无需使用didSelectRowAtIndexPath
来触发segue。实际上,prepareForSegue在调用didSelectRowAtIndexPath
方法之前运行。您可以修改prepareForSegue
以使用indexPathForCell
(传递sender
- 您可能需要正确地投射它)以确定正确的indexPath(以及因此传递给目标视图控制器的事件) )。
或者,在故事板中删除segue并通过从视图控制器本身(使用场景顶部的图标)拖动到DetailViewController来重新创建它。在这种情况下,您当前的代码应该有效 - didSelectRowAtIndexPath
代码将运行并触发segue,将事件作为发件人传递。