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,这不是约定,而是委托模式的必要性。通常,委托人和委托人彼此保持引用,为了避免引用循环,其中一个引用必须很弱。通常是委托具有弱引用。