【问题标题】:Variable nil when trying to pass variable to view controller with segue尝试使用 segue 将变量传递给视图控制器时变量 nil
【发布时间】:2016-07-23 17:28:46
【问题描述】:

这是我目前拥有的代码:

var valueToPass:String!

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
    let indexPath = tableView.indexPathForSelectedRow();
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!;

    valueToPass = currentCell.textLabel.text // valueToPass now equals "test"
    performSegueWithIdentifier("yourSegueIdentifer", sender: self)

}

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    var viewController = segue.destinationViewController as AnotherViewController
    viewController.passedValue = valueToPass // valueToPass equals nil here? Why?
}

如您所见,我已在didSelectRowAtIndexPath 中将“测试”分配给 valueToPass,但在 prepareForSegue 中,valueToPass 为零?为什么?

【问题讨论】:

  • 你的 tableview 是否用 segue 放在故事板中?如果是这种情况,我不确定tableView:didSelectRowAtIndexPath: 是否真的在prepareForSegue:sender: 之前被调用。您可以通过在这两种方法中删除断点并在点击单元格时查看哪个先行来测试这一点。尽量让prepareForSegue:sender: 不依赖于其他方法

标签: ios swift uitableview segue uistoryboardsegue


【解决方案1】:

尝试替换:

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {
    let indexPath = tableView.indexPathForSelectedRow();
    let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!;

    valueToPass = currentCell.textLabel.text // valueToPass now equals "test"
    performSegueWithIdentifier("yourSegueIdentifer", sender: self)

}

有了这个:

func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) {

    let currentCell = tableView.cellForRowAtIndexPath(indexPath.row) as! UITableViewCell;

    valueToPass = currentCell.textLabel.text! // valueToPass now equals "test"
    performSegueWithIdentifier("yourSegueIdentifer", sender: self)

}

此外,当您在情节提要中进行转场时,请确保您没有从 tableview 拖动到下一个 viewcontroller。这是因为如果您自动执行此操作,则将在 didSelectRow 之前调用 perform segue... 使其在设置值之前执行 segue。只需从承载表视图的视图控制器拖动到新视图。

【讨论】:

  • "另外,当你在 storyboard 中进行 segue 时,请确保你没有从 tableview 拖动到下一个 viewcontroller。这是因为如果你自动执行此操作,那么 perform segue 将被调用 BEFORE didSelectRow ...在设置值之前使其执行segue。只需从承载表视图的视图控制器拖动到新视图。“这就是问题所在。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-14
  • 2015-12-14
  • 2015-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多