class 当我在我的 'prepareForSegue' 方法中引用它时,数据变为 null

class data becomes nill when I reference it in my 'prepareForSegue' method

我有一个带有按钮的表格视图,每个按钮都包含一个标签(根据 indexPath.row),当我按下一个特定按钮时,该单元格内容的详细信息(与 class称为 EventEntity)旨在通过 'prepareForSegue' 方法传递到另一个屏幕。

在'infoButtonDidPress'方法中赋值如下图:

func infoButtonDidPress(sender: UIButton){
    eventPressed = eventEntities[sender.tag]
println (eventPressed.name) // prints the name, all good here.
}

问题是,当我将 eventPressed 的内容分配给 'prepareForSegue' 中的 destinationVC 时,它们为零。代码如下:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == "infoButtonSegue"){
        var svc = segue.destinationViewController as! EventDetailsViewController;

    println (eventPressed.name) // NOPE.
    svc.name = eventPressed.name //also NOPE!
}

eventPressed 在 vi​​ewDidLoad 上面声明:

var eventPressed: EventEntity! = EventEntity()

当我尝试使用带有 'NOPE' 注释的任何一行时,我得到的错误是 'Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Appname.EventEntity name]: unrecognized selector sent to instance 0x7fa280e16a50' error

这是怎么回事?

提前致谢!

更新

我已将 performWithSegue 移动到 infoButtonDidPress 方法,但我现在无法引用 destinationViewController。

我的 infoButtonDidPress 现在看起来像这样:

func infoButtonDidPress(sender: UIButton){
   let eventPressed = eventEntities[sender.tag]

   var destinationViewController: UIViewController = self.destinationViewController as EventDetailsViewController
 // error: the current VC does not have a member named destinationViewController

   self.performSegueWithIdentifier("infoButtonSegue", sender: self)
}

如您所见,prepareForSegue 发生在 infoButtonDidPress 被调用之前。

要解决此问题,不要从 tableView 中的原型单元格连接 segue,而是从顶部的 viewController 图标连接它。

看到这个:How to wire segue from ViewController icon

确保将标识符设置为 "infoButtonSegue"。然后在设置 eventPressed:

的值后从 infoButtonDidPress 调用 segue
func infoButtonDidPress(sender: UIButton){
    eventPressed = eventEntities[sender.tag]
    self.performSegueWithIdentifier("infoButtonSegue", sender: self)
}

然后,在 prepareForSegue 中将值传递给目标视图控制器:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject!) {
    if (segue.identifier == "infoButtonSegue") {
        let dvc = segue.destinationViewController as! EventDetailsViewController

        dvc.name = eventPressed.name
    }
}