【发布时间】:2015-10-08 23:14:29
【问题描述】:
我有一个带有按钮的表格视图,每个按钮都包含一个标签(根据 indexPath.row),当我按下特定按钮时,该单元格内容的详细信息(与名为 EventEntity 的类有关)将被传递通过 'prepareForSegue' 方法到另一个屏幕。
在'infoButtonDidPress'方法中赋值如下:
func infoButtonDidPress(sender: UIButton){
eventPressed = eventEntities[sender.tag]
println (eventPressed.name) // prints the name, all good here.
}
问题是当我在'prepareForSegue'中将eventPressed的内容分配给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)
}
【问题讨论】:
-
当您将
let放在函数中的 eventPressed 前面时,您正在为此范围创建一个新变量。相反,只需执行eventPressed = eventEntities[sender.tag] -
我改变了它,我仍然得到'由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[Appname.EventEntity name]:无法识别的选择器发送到实例0x7fa280e16a50'错误
-
对我来说看起来像是一个范围。您是否在 viewDidLoad 中使用 var 声明它?在这种情况下,仍然没有声明全局变量。尝试删除 var 看看是否会改变它。
-
@JuliaWill 不会,我在 viewDidLoad 上方声明它。
-
尝试设置断点,然后在调试器中po eventPressed。