NSNotification永远不会被发送

时间:2014-06-07 17:22:32

标签: swift ios8

我试图在Swift中使用NSNotificationCenter,而我遇到了问题。我正在尝试以下方法:

class MyClass {

    init() {

        NSNotificationCenter.defaultCenter().addObserver(self, selector: "stopTimer", name: UIApplicationDidEnterBackgroundNotification, object: [])
    }

    func stopTimer() {
        println("Entered background!")
    }
}

当按下主页按钮时,观察者永远不会调用选择器,因此我的消息永远不会被打印出来。

请注意,我在最后发送了一个空对象,addObserver的方法签名期待一个隐式解包的对象,并将其设置为nil会导致应用程序出现EXC_BAD_ACCESS错误进入背景。

有什么想法吗?

修改

我忘了提到这个代码是从我项目中包含的框架执行的。

执行代码会给我一个糟糕的访问中止信号。

enter image description here

3 个答案:

答案 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添加日志语句,以查看代理是否在进入后台后被取消分配。