Ios 为什么在我设置UITabBarControllerDelegate后,它立即为零?

Ios 为什么在我设置UITabBarControllerDelegate后,它立即为零?,ios,swift,delegates,uitabbarcontroller,Ios,Swift,Delegates,Uitabbarcontroller,我遇到了一个奇怪的问题,涉及到UITabBarControllerDelegate 我正在使用以下代码: import UIKit class MainTabBarController: UITabBarController { override func viewDidLoad() { super.viewDidLoad() self.delegate = MainTabBarControllerDelegate() print("d

我遇到了一个奇怪的问题,涉及到
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)")
    }

}
然后,在我的故事板中,我有香草
uitabarcontroller
和两个普通
uiviewcontroller
连接。我只是想捕捉选项卡更改事件,但由于某种原因,我的
MainTabBarController
delegate
设置不正确

当我使用上面的代码运行项目时,控制台输出:

did set delegate to nil

为什么它不创建一个适当的
MainTabBarControllerDelegate
实例,以便调用它的委托方法呢?

这里
self.delegate=MainTabBarControllerDelegate()
创建一个委托,并立即将其分配给
delegate
属性,即
。因此,会创建委托,但随后会立即释放,因为没有任何内容包含对它的强引用。

委托属性通常很弱。你必须在其他地方对你的代表进行有力的引用,以使其保持活力。啊,是的!愚蠢的错误,谢谢!!请将此作为回答而不是评论,这样我就可以接受它,您就可以得到应得的分数;)@安东尼科夫敦。是AFK(来自手机),所以必须简洁。我很好奇你怎么知道MainTabBarControllerDelegate有一个弱引用。这是一个常见的约定,还是您实际检查了MainTabBar的声明…?@DanBeaulieu,这不是约定,而是委托模式的必要性。通常,委托人和委托人彼此保持引用,为了避免引用循环,其中一个引用必须很弱。通常是委托具有弱引用。