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 在 viewDidLoad 上面声明:
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
}
}
我有一个带有按钮的表格视图,每个按钮都包含一个标签(根据 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 在 viewDidLoad 上面声明:
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
}
}