NotificationCenter 中的推送通知在 userinfo 中返回 nil - Swift3

Posted

技术标签:

【中文标题】NotificationCenter 中的推送通知在 userinfo 中返回 nil - Swift3【英文标题】:Push notification in NotificationCenter return nil in userinfo - Swift3 【发布时间】:2016-10-04 10:10:58 【问题描述】:

我已将源代码从 Swift 2.2 更新到 Swift 3.0 以进行推送通知。但我无法获取用户信息。它将返回零。 有人可以帮忙吗?

在应用程序委托中接收推送通知:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) 

        // Define identifier
        let notificationName = Notification.Name("PushNotificationMessageReceivedNotification")

        // Register to receive notification
        NotificationCenter.default.addObserver(self, selector: #selector(MenuViewController.remoteNotificationReceived), name: notificationName, object: userInfo)

        // Post notification
        NotificationCenter.default.post(name: notificationName, object: nil)
    

在其他 viewController 中我想收到推送通知并执行一些操作:

override func viewDidLoad() 
        super.viewDidLoad()
        self.delegate = self

        NotificationCenter.default.addObserver(self, selector: #selector(MenuViewController.remoteNotificationReceived(_:)), name: NSNotification.Name(rawValue: "PushNotificationMessageReceivedNotification"), object: nil)

    

func remoteNotificationReceived(_ notification: Notification)
    
        print("Notification:\(notification.userinfo)");

【问题讨论】:

看到一次***.com/questions/39382852/… 您在 NotificationCenter.default.post(name: notificationName, object: nil) 发送 nil 用户信息 如果要发送用户信息 Post 必须是这样 NotificationCenter.default.post(name: notificationName, object: SOME_USER_INFO_OBJ) 见我的回答。 ***.com/questions/39504334/… 【参考方案1】:

发布通知时传递用户信息 像这样:-

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) 

        // Define identifier
        let notificationName = Notification.Name("PushNotificationMessageReceivedNotification")

        // Register to receive notification
        NotificationCenter.default.addObserver(self, selector: #selector(MenuViewController.remoteNotificationReceived), name: notificationName, object: userInfo)

        // Post notification
        NotificationCenter.default.post(name: notificationName, object: nil, userInfo :userInfo)
    

【讨论】:

以上是关于NotificationCenter 中的推送通知在 userinfo 中返回 nil - Swift3的主要内容,如果未能解决你的问题,请参考以下文章

每当iOS Swift中的对象发生更改时如何调用notificationCenter?

在 iOS 上检测传入的 NotificationCenter 通知

Swift 学习之 NotificationCenter

NotificationCenter接收不到通知的原因

RxSwift之NotificationCenter的使用和自定义

声明 NotificationCenter.default.addObserver [swift]