Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 从未发送通知_Swift_Ios8 - Fatal编程技术网

Swift 从未发送通知

Swift 从未发送通知,swift,ios8,Swift,Ios8,我正试图与Swift一起使用NSNotificationCenter,但遇到了一个问题。我正在尝试以下方法: class MyClass { init() { NSNotificationCenter.defaultCenter().addObserver(self, selector: "stopTimer", name: UIApplicationDidEnterBackgroundNotification, object: []) } func

我正试图与Swift一起使用NSNotificationCenter,但遇到了一个问题。我正在尝试以下方法:

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
的类),所以我缺少
方法签名选择器:
实现。