为什么选择器不调用 swift
Why Selector Not Calling in swift
我正在通过我的视图控制器调用:
Util().nav(self.navigationItem)
而Class是:
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")
}
}
这是一个 classic 问题。请注意,ARC 需要查看对 Utils 对象的强引用。但在这种情况下,发生的事情是,您正在实例化并调用它的方法。但是 ARC 会认为一旦来自定义 this 的范围的控制权出来,这个对象就可以离开,并且它将释放正在创建的临时 Utils 对象。这就是为什么您的操作永远不会被调用的原因。
要解决这个问题,不要将函数作为成员函数,而是将它们设为 class 个函数-
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
我正在通过我的视图控制器调用:
Util().nav(self.navigationItem)
而Class是:
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")
}
}
这是一个 classic 问题。请注意,ARC 需要查看对 Utils 对象的强引用。但在这种情况下,发生的事情是,您正在实例化并调用它的方法。但是 ARC 会认为一旦来自定义 this 的范围的控制权出来,这个对象就可以离开,并且它将释放正在创建的临时 Utils 对象。这就是为什么您的操作永远不会被调用的原因。
要解决这个问题,不要将函数作为成员函数,而是将它们设为 class 个函数-
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