【发布时间】:2017-07-06 13:50:02
【问题描述】:
编辑:请注意以下问题讨论在之间使用委托 也在 UITabBarController 中实现的 2 个视图控制器。
我在这里和 YouTube 上进行了相当多的搜索,但没有看到我的问题在其他地方被复制。我会保持重点。
我有 2 个我自己编写的视图控制器——不是由 XCode 生成的——; TabOneController 和 TabTwoController
以下是两者的编码...
import UIKit
class TabOneController: UIViewController{
private let instanceOfTabOneView = TabOneView()
var vc1Delegate: fromOneToTwo!
override func loadView() {
super.loadView()
view.addSubview(instanceOfTabOneView.buildTheVu())
view.backgroundColor = UIColor.white
runThisOnce()
}
func runThisOnce(){
vc1Delegate.passTheValue(heroNameIs: "pass this to TabTwoController")
}
}
protocol fromOneToTwo{
func passTheValue(heroNameIs: String)
}
至于标签 2...
import UIKit
class TabTwoController: UIViewController, fromOneToTwo{
private let instanceOfTabTwoView = TabTwoView()
override func loadView() {
super.loadView()
view.addSubview(instanceOfTabTwoView.buildTheVu())
assignDelegateToSelf()
}
func assignDelegateToSelf(){
let instanceTabOne = TabOneController()
instanceTabOne.vc1Delegate = self
}
func passTheValue(heroNameIs:String){
instanceOfTabTwoView.txtFld.text = heroNameIs
}
}
我在运行时遇到以下错误-应用构建成功-...
致命错误:在展开可选值时意外发现 nil
在下一行...
vc1Delegate.passTheValue(heroNameIs: "pass this to TabTwoController")
当我注释掉上面的行时,应用程序构建并运行成功,但应用程序当然不执行委托。
我有点理解编译器试图告诉我的意思,即
vc1Delegate
还没有被实例化-我猜-。但是我在每块岩石下都搜索过,似乎找不到解决方法。
如果有任何帮助或指导,我将不胜感激。抱歉,如果我的代码看起来不成熟,我是 Swift 和一般编程的新手。谢谢。
【问题讨论】:
标签: swift3 delegates runtime-error optional