gpt4 book ai didi

ios - 引用项目在 viewDidLoad 中安全地初始化

转载 作者:行者123 更新时间:2023-11-28 10:55:20 25 4
gpt4 key购买 nike

本周早些时候我遇到了一个奇怪的错误,想跟进以了解如何防止问题的根本原因。

采用以下代码。

//*****************************
//MAINVIEWCONTROLLER CLASS CODE
//*****************************

//Some event happens that triggers me to want to load up TestViewController.
func showViewController(){
var testController = TestViewController()
testController.someMethod("Test1")

self.navigationController?.pushViewController(testController, animated: true)
}

//*****************************
//TESTVIEWCONTROLLER CLASS CODE
//*****************************
testView:TestView!

override func viewDidLoad(){
super.viewDidLoad()
testView = TestView()
...
}

func someMethod(someData:String){
testView.name = someData //AppCrashes here because testView might be nil.
...
}

因此 someMethodTestViewController 有机会完成并创建 testView 之前被触发。然后我得到一个 cannot unwrap an optional value because testView is nil 并且我正在访问它的属性。

奇怪的是,我正在运行的应用程序可能在 6 个不同的地方做同样的事情,5/6 工作得很好,但 1/6 现在给我这个错误。我猜这是因为 viewDidLoad 不能保证在 someMethod 执行之前立即触发或完成,但为什么这不会在所有 6 个用例中发生.

所以我的主要问题是:

  1. 为什么会发生这种崩溃?
  2. 避免它的最佳做法是什么。

谢谢!深思熟虑的答案将一如既往地获得投票!让我知道是否有更多信息会有所帮助。

最佳答案

基本上从不在从源 Controller 调用的涉及 UI 元素的目标 Controller 中运行代码。创建一个属性,在源 Controller 中设置它,并在目标 Controller 的 viewDidLoad() 中将值赋给 UI 元素,例如:

//*****************************
//MAINVIEWCONTROLLER CLASS CODE
//*****************************

//Some event happens that triggers me to want to load up TestViewController.
func showViewController(){
var testController = TestViewController()
testController.someData = "Test1"

self.navigationController?.pushViewController(testController, animated: true)
}

//*****************************
//TESTVIEWCONTROLLER CLASS CODE
//*****************************
testView:TestView!

var someData = ""

override func viewDidLoad(){
super.viewDidLoad()
testView = TestView()
testView.name = someData
...
}

关于ios - 引用项目在 viewDidLoad 中安全地初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43947440/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com