Swift 从未发送通知
我正试图与Swift一起使用NSNotificationCenter,但遇到了一个问题。我正在尝试以下方法:Swift 从未发送通知,swift,ios8,Swift,Ios8,我正试图与Swift一起使用NSNotificationCenter,但遇到了一个问题。我正在尝试以下方法: class MyClass { init() { NSNotificationCenter.defaultCenter().addObserver(self, selector: "stopTimer", name: UIApplicationDidEnterBackgroundNotification, object: []) } func
class MyClass {
init() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "stopTimer", name: UIApplicationDidEnterBackgroundNotification, object: [])
}
func stopTimer() {
println("Entered background!")
}
}
当按下home(主页)按钮时,观察者从未调用选择器,因此我的消息从未打印出来
请注意,我在末尾发送了一个空对象,addObserver
的方法签名需要一个隐式展开的对象,并将其设置为nil
会在应用程序进入后台时导致EXC\u BAD\u ACCESS
错误
有什么想法吗
编辑
我忘了提到这段代码是从我的项目中包含的框架执行的
执行代码会给我一个错误的访问中止信号
对于可选参数,您应该能够传递nil。你能详细说明一下如果你这样做会发生什么吗?这对我有用:
func init() {
super.init()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "stopTimer", name: UIApplicationDidEnterBackgroundNotification, object: nil)
}
func stopTimer() {
println("Entered background!")
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
也许您应该尝试实现
applicationidenterbackground(application:UIApplication)
为了进一步排除故障,您可能还需要在应用程序代理的
deinit
中添加一条log语句,以查看代理在进入后台后是否被解除分配。好的,我已经解决了这个问题。2个问题:
- 在我的应用程序中没有对我的类的实例的强引用
- 我的类没有扩展
NSObject
object:nil
,一切正常
谢谢你的帮助!:) 我已将[]替换为nil,它对我起了作用。您并不是“在末尾发送一个空对象”<代码>[]是一个数组,不是吗?是的,空数组,它是一个对象。我没有使用超类,不需要
super.init()
。哦,是的,我在测试它时使用了一个超类。仍然应该使用“nil”参数。如果发送空数组(“[]”),则会发生崩溃,因为stopTimer函数无法获取参数。您确定在转到后台时尚未释放类实例吗?听起来好像对stopTimer的调用试图访问错误的地址,例如已经被垃圾收集的对象实例。我为Denit添加了代码以防止这种情况发生。是的,该实例正在被释放。另一个问题是,因为它没有扩展NSObject
(或任何其他将继承NSObject
的类),所以我缺少方法签名选择器:
实现。