为什么 UITabBarControllerDelegate 在我设置后立即为 nil?
Why is the UITabBarControllerDelegate nil right after I set it?
我有一个奇怪的问题涉及 UITabBarControllerDelegate
。
我正在使用以下代码:
import UIKit
class MainTabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = MainTabBarControllerDelegate()
print("did set delegate to \(self.delegate)")
}
}
class MainTabBarControllerDelegate: NSObject, UITabBarControllerDelegate {
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
print("selected: \(viewController) --> index: \(tabBarController.selectedIndex)")
}
}
然后,在我的 Storyboard 中,我将香草 UITabBarController
与两个普通 UIViewControllers
相连。我只是想捕捉选项卡更改事件,但由于某种原因,我的 MainTabBarController
的 delegate
没有正确设置。
当我用上面的代码运行项目时,控制台输出:
did set delegate to nil
为什么它不创建 MainTabBarControllerDelegate
的适当实例以便可以调用其委托方法?
在这里 self.delegate = MainTabBarControllerDelegate()
您创建了一个委托并立即将其分配给 delegate
属性,即 weak
。因此,委托被创建但随后立即被释放,因为没有任何东西持有对它的强引用。
我有一个奇怪的问题涉及 UITabBarControllerDelegate
。
我正在使用以下代码:
import UIKit
class MainTabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = MainTabBarControllerDelegate()
print("did set delegate to \(self.delegate)")
}
}
class MainTabBarControllerDelegate: NSObject, UITabBarControllerDelegate {
func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) {
print("selected: \(viewController) --> index: \(tabBarController.selectedIndex)")
}
}
然后,在我的 Storyboard 中,我将香草 UITabBarController
与两个普通 UIViewControllers
相连。我只是想捕捉选项卡更改事件,但由于某种原因,我的 MainTabBarController
的 delegate
没有正确设置。
当我用上面的代码运行项目时,控制台输出:
did set delegate to nil
为什么它不创建 MainTabBarControllerDelegate
的适当实例以便可以调用其委托方法?
在这里 self.delegate = MainTabBarControllerDelegate()
您创建了一个委托并立即将其分配给 delegate
属性,即 weak
。因此,委托被创建但随后立即被释放,因为没有任何东西持有对它的强引用。