self.children[0].currentInfo = updatedInfo
. 事实证明,在父视图控制器中的“普通”函数中,这一点工作得很好。但是从父视图控制器中的委托函数内部,它使程序崩溃。显然,有时但不总是
self.children.isEmpty = true
内部委托函数。
在不知道原因的情况下,我不知道如何可靠地使用
self.children
因为我的应用程序介绍了很多复杂的因素,所以我决定要研究一个非常简单的玩具。以下是我所拥有的(代码在故事板截图下方):
在MainViewController文件中
import UIKit
class MainViewController: UIViewController, InfoDelegate {
var text = "Text from MainViewController"
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = UIColor.lightGray
printString("Text from MainViewController's viewDidLoad")
}
// Ordinary func
func printString(_ string: String) {
print(string)
print("In printString, self.children.isEmpty is \(self.children.isEmpty)")
}
// Delegate func
func messageString(_ string: String) {
print(string)
print("In messageString, self.children.isEmpty is \(self.children.isEmpty)")
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let textViewController = segue.destination as? TextViewController {
textViewController.text = text
textViewController.delegate = self
}
}
}
在TextViewController中
import UIKit
protocol InfoDelegate: AnyObject { func messageString(_ string: String) }
class TextViewController: UIViewController {
@IBOutlet weak var textView: UITextView!
var text = "Text from TextViewController"
weak var delegate: InfoDelegate?
override func viewDidLoad() {
super.viewDidLoad()
textView.text = text
delegate?.messageString("Text from TextViewController's InfoDelegate")
}
}