iOS Swift 中未调用 Framework Delegate 和 IBAction
iOS Framework Delegate and IBAction are not getting called in Swift
我正在 Objective-C 中创建一个框架。
我在 Objective-C 项目中一切正常。
但是当我将我的框架与 Swift 项目集成时,它表现得很奇怪。
我的Swift项目:
- 只有一个 ViewController 和一个连接了 IBAction 的按钮。
现在:
- 在
viewDidAppear
中,我已经初始化了我的框架并将 delegate
设置为 self
。
- 一旦调用了初始化成功的委托,我将调用另一个方法。
- 但奇怪的是一切都停止了,甚至
IBAction
也不工作。
但是当我尝试在 viewDidAppear 中添加 NSTimer 重复方法时,一切又都正常了。
我知道这是一个非常奇怪的问题,但可能有人遇到过这个问题。
我的代码:
override func viewDidAppear(animated: Bool) {
MySDK.sharedInstance().initWithAppKey("123")
MySDK.sharedInstance().delegate = self
NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "timer", userInfo: nil, repeats: true)
}
代表通话,
//This is getting called
func initSdkSuccessful() {
MySDK.sharedInstance().doStuff()
}
//This is not getting called
func stuffDone() {
}
IBActions,
//This is getting called if I do not set delegate,but if I set delegate to self then It doesn't.
@IBAction func btnTapped(sender: UIButton) {
MySDK.sharedInstance().doAnotherStuff()
}
谢谢
我找到了非常简单的解决方案,
刚刚将我的委托从 weak
引用更改为 strong
,就是这样。
可能是问题是,当委托方法之一被调用时,委托对象变为 nil,因为它是 weak
引用。
我正在 Objective-C 中创建一个框架。 我在 Objective-C 项目中一切正常。 但是当我将我的框架与 Swift 项目集成时,它表现得很奇怪。
我的Swift项目:
- 只有一个 ViewController 和一个连接了 IBAction 的按钮。
现在:
- 在
viewDidAppear
中,我已经初始化了我的框架并将delegate
设置为self
。 - 一旦调用了初始化成功的委托,我将调用另一个方法。
- 但奇怪的是一切都停止了,甚至
IBAction
也不工作。
但是当我尝试在 viewDidAppear 中添加 NSTimer 重复方法时,一切又都正常了。
我知道这是一个非常奇怪的问题,但可能有人遇到过这个问题。
我的代码:
override func viewDidAppear(animated: Bool) {
MySDK.sharedInstance().initWithAppKey("123")
MySDK.sharedInstance().delegate = self
NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: "timer", userInfo: nil, repeats: true)
}
代表通话,
//This is getting called
func initSdkSuccessful() {
MySDK.sharedInstance().doStuff()
}
//This is not getting called
func stuffDone() {
}
IBActions,
//This is getting called if I do not set delegate,but if I set delegate to self then It doesn't.
@IBAction func btnTapped(sender: UIButton) {
MySDK.sharedInstance().doAnotherStuff()
}
谢谢
我找到了非常简单的解决方案,
刚刚将我的委托从 weak
引用更改为 strong
,就是这样。
可能是问题是,当委托方法之一被调用时,委托对象变为 nil,因为它是 weak
引用。