gpt4 book ai didi

swift - 为什么选择器不快速调用

转载 作者:行者123 更新时间:2023-11-28 12:52:48 25 4
gpt4 key购买 nike

我正在通过我的 View Controller 调用:

Util().nav(self.navigationItem)

类是:

class Util: NSObject {

// MARK: - Initialization
override init() {
super.init()

}

func nav(navigationItem: UINavigationItem){
let leftBackArrow = UIBarButtonItem(title: "A", style: .Plain, target: self, action: "backPress:")
navigationItem.leftBarButtonItem = leftBackArrow;
leftBackArrow.image = UIImage(named: "nav_back")
}

func backPress(sender: UIBarButtonItem){
print("HI")
}

}

最佳答案

这是一个经典问题。请注意,ARC 需要查看对 Utils 对象的强引用。但在这种情况下,发生的事情是,您正在实例化并调用它的方法。但是 ARC 会认为一旦来自定义 this 的范围的控制权出来,这个对象就可以离开,并且它将释放正在创建的临时 Utils 对象。这就是为什么您的操作永远不会被调用的原因。

要解决这个问题,不要将函数作为成员函数,而是将它们设为类函数-

class Util: NSObject {

class func nav(navigationItem: UINavigationItem){
let leftBackArrow = UIBarButtonItem(title: "A", style: .Plain, target: self, action: "backPress:")
navigationItem.leftBarButtonItem = leftBackArrow;
leftBackArrow.image = UIImage(named: "nav_back")
}

class func backPress(sender: UIBarButtonItem){
print("HI")
}
}

现在您可以将其用作:

Util.nav(self.navigationItem)

HTH

关于swift - 为什么选择器不快速调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35932029/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com