【问题标题】:Can print variable but when assigning it to another returns nil (Swift)可以打印变量,但将其分配给另一个变量时返回 nil (Swift)
【发布时间】:2014-10-16 10:30:11
【问题描述】:

我已经用 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。我应该补充一点,标签连接到视图。我该如何解决这个问题?

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

【问题讨论】:

    标签: ios swift variable-assignment


    【解决方案1】:

    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
    }
    

    【讨论】:

    • 我仍然遇到同样的错误?感谢@connor 的快速回答
    • 它仍然无法正常工作:/我已经复制了你的新代码,但它仍然返回 nil?
    • viewDidLoad 中的 detailsLabel 是否为零?
    • 将值分配给 detailsLabel.text 后立即出现 nil
    • 检查 detailsLabel 本身在 viewDidLoad 中是否为 nil if detailsLabel == nil { println("nil") }
    猜你喜欢
    • 2019-08-31
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 2014-11-16
    • 2021-12-28
    相关资源
    最近更新 更多