为什么我的userNotificationCenter didReceive被触发后无法运行

时间:2019-03-05 00:54:24

标签: notifications background swift4

我使用UserNotifications做一个简单的通知进行测试,我在AppDelegate中编写了如下代码,当通知在后台触发时,它将在屏幕上显示该消息,但不会同时运行代码print(。 ..)和a.get()):

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

    print("run in didReceive")

    let a = ViewController()
    a.get()

}


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {


    UNUserNotificationCenter.current().requestAuthorization(options: [.alert,.sound,.badge, .carPlay], completionHandler: { (granted, error) in
        if granted {
            print("granted")
        }else{
            print("not granted")
        }
    })

    UNUserNotificationCenter.current().delegate = self

    return true
}

我只想在后台运行应用程序时运行“ viewcontroller”功能...

1 个答案:

答案 0 :(得分:0)

一个问题是这一行:

let a = ViewController()

您正在创建一个“松散”的视图控制器,然后将其扔掉。您可能想要的是对接口中已经存在的一些现有视图控制器的引用。

更广泛的问题可能是关于userNotificationCenter(_:didReceive:withCompletionHandler:)的错误假设。不会调用它来指示出现了通知警报(即已触发通知)。它被调用以指示用户与通知进行了互动,例如点击或关闭警报(如果已配置)。仅出现并再次消失的横幅警报,无需用户干预,将不会导致userNotificationCenter(_:didReceive:withCompletionHandler:)被调用。