可以打印变量,但在将其分配给另一个时返回nil(Swift)

时间:2014-10-16 10:30:11

标签: ios swift variable-assignment

我已经在swift中编写了一个应用程序,在有问题的部分中,它有两个视图及其相应的视图控制器。此部分的目的是让用户单击控制器1上的某个单元格,该单元格打开一个带有表视图的模式视图,其中可以选择表视图单元格。当用户点击一个时,它应返回到控制器1并更新原始单元格上的详细信息文本。 问题是标签不会更新。这是代码:

此代码来自模态视图控制器。这是获取所选单元格并更新变量的代码。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var find = totalProducts[productSectionTitles[indexPath.section]]!
    selectedCell = find[indexPath.row]
    let rootController = TableViewController()
    println("\(selectedCell) from productController from selectedCell variable")
    rootController.updateText(selectedCell)
    self.dismissViewControllerAnimated(true, completion: nil)
    cell.accessoryType = UITableViewCellAccessoryType.Checkmark
}

此代码来自控制器1,其中启动了模态视图。这是从模态视图控制器调用来更新文本。

func updateText(transferVar: String) {
    println("\(transferVar) from rootController from transfer parameter")
    detailsLabel?.text = transferVar
    println(detailsLabel?.text)

}

因此参数在模态视图控制器和rootController之间完美地传输数据,并且它肯定保存一个值,因为它打印出正确的值。但是一旦我尝试分配它返回nil,我发现这是println()之后应该分配的detailText。这是单击单元格时控制台打印的内容。

Wood4 from productController from selectedCell variable
Wood4 from rootController from transfer parameter
nil

我不知道如何让标签打印出transferVar。我应该补充说标签已连接到视图。我该如何解决这个问题?

提前致谢。 希望你明白。 :

1 个答案:

答案 0 :(得分:0)

是否已加载detailsLabel?如果它是一个隐含的未打开的出口,它可能还没有装载,但仍然是零。尝试在没有?的情况下访问它。现在它无声地失败,没有它应该崩溃的?

为了确保在分配标签之前加载detailsLabel,您可以在viewDidLoad()中进行分配。一种简单的方法是在text()中分配一个实例变量,然后在viewDidLoad()中将标签设置为该变量。

var labelText: String!
func text(transferVar: String) {
    println("\(transferVar) from rootController from transfer parameter")
    labelText = transferVar
}
public override func viewDidLoad(){
    detailsLabel.text = labelText
}