【问题标题】:IBOutlet is not initializedIBOutlet 未初始化
【发布时间】:2018-02-07 19:17:21
【问题描述】:

xcode 有一些奇怪的地方。突然间,普通的流程被打破了。为了检查它,我创建了一个只有两个视图控制器的新项目。第一个(命名为 ViewController)只包含一个按钮来打开第二个(命名为 NewViewController)的控制器,其中包含唯一的 UILabel。

import UIKit

class ViewController: UIViewController {
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "Show New View" {
            guard let newVC = segue.destination as? NewViewController else { return }

            newVC.passedText = "some abstract text"
        }
    }
}

import UIKit

class NewViewController: UIViewController {
    @IBOutlet weak var myLabel: UILabel!

    var passedText: String? {
        didSet {
            guard let text = passedText else { return }

            myLabel.text = text
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

the main.storyboard looks so

IBOutlet is well connected

But the debugger shows what the UILabel is nil

我做错了什么?

【问题讨论】:

  • 这是正常的。 prepareForSegue 中尚未加载视图,因此未设置出口。你应该有条件地在你的设置器中打开出口,你需要在 viewDidLoadviewWillAppear 中建立视图的初始状态
  • 是的,我知道了。谢谢!

标签: ios swift xcode iboutlet


【解决方案1】:

不,没有任何东西“损坏”。是你做错了。在您调用newVC.passedText = "some abstract text" 时,newVC 还没有加载它的视图,它的出口仍然是nil。所以设置myLabel.text的调用发生在插座确实仍然是nil的时候。

您的错误是您尝试过早配置myLabel。将值存储在newVC 中,是的。但至于设置myLabel.text,等到viewDidLoad,view和outlets都正常工作了。

因此,正确的模式如下所示:

var passedText: String? {
    didSet {
        guard let text = passedText else { return }
        myLabel?.text = text
    }
}

override func viewDidLoad() {
    super.viewDidLoad()
    guard let text = passedText else { return }
    myLabel?.text = text
}

现在,无论何时 passedText 相对于viewDidLoad 设置,您的代码都会做正确的事情。

【讨论】:

  • 是的,你是对的!我检查了我以前的代码并且运行良好。我检查了 viewDidLoad() 或 viewWillAppear() 中传递的变量。所以,以前它有效,现在这是我的错误。谢谢!
【解决方案2】:

您需要在情节提要中视图控制器的身份检查器中设置自定义类NewViewController。也许你忘了这样做?

【讨论】:

  • 是的,但显然这不是问题 ;-)
猜你喜欢
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多