我试图在Swift中使用NSNotificationCenter,而我遇到了问题。我正在尝试以下方法:
class MyClass {
init() {
NSNotificationCenter.defaultCenter().addObserver(self, selector: "stopTimer", name: UIApplicationDidEnterBackgroundNotification, object: [])
}
func stopTimer() {
println("Entered background!")
}
}
当按下主页按钮时,观察者永远不会调用选择器,因此我的消息永远不会被打印出来。
请注意,我在最后发送了一个空对象,addObserver
的方法签名期待一个隐式解包的对象,并将其设置为nil
会导致应用程序出现EXC_BAD_ACCESS
错误进入背景。
有什么想法吗?
修改
我忘了提到这个代码是从我项目中包含的框架执行的。
执行代码会给我一个糟糕的访问中止信号。
答案 0 :(得分:3)
您应该能够为可选参数传递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)
}
答案 1 :(得分:3)
好吧,我想出来了。 2个问题:
NSObject
现在,我可以设置object: nil
,一切正常。
感谢您的帮助! :)
答案 2 :(得分:1)
也许您应该尝试实施applicationDidEnterBackground(application: UIApplication)
?
要进一步排查问题,您可能还需要向应用代表的deinit
添加日志语句,以查看代理是否在进入后台后被取消分配。