【问题标题】:Am I going crazy? UIApplicationWillEnterForegroundNotification not working on simulator or device我要疯了吗? UIApplication WillEnterForegroundNotification 在模拟器或设备上不起作用
【发布时间】:2016-06-10 04:19:22
【问题描述】:

这是一个非常简单的问题。在我的视图控制器中,我正在注册一个“前台”通知:

override func viewDidLoad() {

    super.viewDidLoad()
    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(MyViewController.applicationDidEnterForeground(_:)),
              name: UIApplicationWillEnterForegroundNotification, object: nil)

}

func applicationDidEnterForeground(notification: NSNotification) {
    print("I'm not going crazy")
}

我的期望

将应用程序前台化后,应执行打印语句并将其打印到控制台。

但是……

这永远不会发生。我是一位经验丰富的 iOS 开发人员,我已经尝试了一个小时左右。

我到底能错过什么?这对其他人有用吗?试过了:

  • object 的不同值,(self,nil, UIApplication.sharedApplication())
  • 注册UIApplicationDidEnterBackgroundNotification - 工作正常
  • 重启 Xcode,模拟器
  • 在设备和模拟器上运行
  • 清理构建文件夹

【问题讨论】:

    标签: ios xcode swift


    【解决方案1】:

    看起来 UIViewController 上的一个扩展正在调用

    NSNotificationCenter.defaultCenter().removeObserver(self)

    随意,不考虑任何子类。不是很有帮助,而且很难找到,因为扩展可能与您正在处理的任何事情完全无关,甚至不一定是视图控制器类继承的一部分。

    如果您正在编写扩展程序...请记住这一点!!!

    【讨论】:

    • 那么,如您的问题所述,如何注册不同的通知?
    • @rmaddy 删除观察者发生在视图最初显示后不久,在异步操作之后。当我尝试它时,我一定有点幸运 - 即在视图控制器完成异步调用之前将应用程序后台化 - 这是我能想出的唯一解释。
    猜你喜欢
    • 1970-01-01
    • 2022-11-07
    • 2012-07-11
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    相关资源
    最近更新 更多