【问题标题】:Not able to call method in diffrent class without write init method不写 init 方法就不能调用不同类中的方法
【发布时间】:2017-04-23 08:50:46
【问题描述】:

我无法从另一个类中调用handleRegister 方法。

我创建了一个名为 A 的类,它有 handleRegister 方法:

class A {
   static var a:A?
   init(){
      A.a = self
   }

   @objc func handleRegister(){
      print("Hello method1")
   }
}

ViewController 类,我从中调用handleRegister 方法:

class ViewController: UIViewController {
  
    @IBOutlet weak private var btnFirst :UIButton?
  
    override func viewDidLoad() {
       super.viewDidLoad()
       // Do any additional setup after loading the view, typically from a nib.
       let obj = A()
       btnFirst?.addTarget(obj, action: #selector(obj.handleRegister), for: UIControlEvents.touchUpInside)
    }
  
    override func didReceiveMemoryWarning() {
       super.didReceiveMemoryWarning()
       // Dispose of any resources that can be recreated.
    }
}

在我的ViewController 类中,我有btnFirst 现在我正在尝试为btnFirst 添加目标并尝试调用handleRegister 形式的handleRegister 方法,它工作正常。

但我的问题是,当我在 A 类中评论 init 方法时,我无法调用方法 handleRegister

谁能告诉我为什么init 方法对于添加另一个类的按钮目标很重要

【问题讨论】:

    标签: ios objective-c iphone swift init


    【解决方案1】:

    您正在 viewDidLoad 中创建 A 类对象,该对象将在 viewDidLoad 之后立即被释放。在 A 类初始化程序中,您正在通过编写此 A.a = self 创建 A 的强引用(这就是调用按钮操作的原因)。只需在viewDidLoad 之外创建A 类对象,它就可以正常工作。

    【讨论】:

      猜你喜欢
      • 2013-04-19
      • 2015-12-20
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多