Swift NotificationCenter 将 userInfo 传递给观察视图控制器
Swift NotificationCenter passing userInfo to observing view controller
我正在尝试将 userInfo 从对象传递到观察视图控制器。由于某种原因,它一直在崩溃。这是代码:
观察者:
NotificationCenter.default.addObserver(
self,
selector: #selector(self.alarmFired(_:)),
name: Notification.Name(rawValue: "AlarmFiringNotification"),
object: nil)
接收函数:
@objc func alarmFired(_ notification: UNNotification) {
let userInfo = notification.request.content.userInfo
let title = userInfo["title"] as? String
let body = userInfo["body"] as? String
let alert = UIAlertController(title: title, message: body, preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alert.addAction(okAction)
}
通知广播:
public static func broadcastAlarmFiringNotification(with userInfo: [String: Any]) {
NotificationCenter.default.post(Notification(name: Notification.Name(rawValue: "AlarmFiringNotification"), object: self, userInfo: userInfo))
}
广播电话:
NotificationBroadcaster.broadcastAlarmFiringNotification(with: ["title": title, "body": body])
但它一直崩溃并显示此输出:
2018-03-14 18:51:06.743621-0400 App[33718:871608] -[NSConcreteNotification request]: unrecognized selector sent to instance 0x60c00005c860
2018-03-14 18:51:06.754868-0400 App[33718:871608] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteNotification request]: unrecognized selector sent to instance 0x60c00005c860'
它在通知广播时崩溃 (NotificationCenter.default.post...)
我真的很困惑,感谢任何帮助!
这里的UNNotification
class不是你想要的。将签名更改为:
@objc func alarmFired(notification: Notification) {
let userInfo = notification.userInfo
我正在尝试将 userInfo 从对象传递到观察视图控制器。由于某种原因,它一直在崩溃。这是代码:
观察者:
NotificationCenter.default.addObserver(
self,
selector: #selector(self.alarmFired(_:)),
name: Notification.Name(rawValue: "AlarmFiringNotification"),
object: nil)
接收函数:
@objc func alarmFired(_ notification: UNNotification) {
let userInfo = notification.request.content.userInfo
let title = userInfo["title"] as? String
let body = userInfo["body"] as? String
let alert = UIAlertController(title: title, message: body, preferredStyle: .alert)
let okAction = UIAlertAction(title: "OK", style: .default, handler: nil)
alert.addAction(okAction)
}
通知广播:
public static func broadcastAlarmFiringNotification(with userInfo: [String: Any]) {
NotificationCenter.default.post(Notification(name: Notification.Name(rawValue: "AlarmFiringNotification"), object: self, userInfo: userInfo))
}
广播电话:
NotificationBroadcaster.broadcastAlarmFiringNotification(with: ["title": title, "body": body])
但它一直崩溃并显示此输出:
2018-03-14 18:51:06.743621-0400 App[33718:871608] -[NSConcreteNotification request]: unrecognized selector sent to instance 0x60c00005c860
2018-03-14 18:51:06.754868-0400 App[33718:871608] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteNotification request]: unrecognized selector sent to instance 0x60c00005c860'
它在通知广播时崩溃 (NotificationCenter.default.post...)
我真的很困惑,感谢任何帮助!
这里的UNNotification
class不是你想要的。将签名更改为:
@objc func alarmFired(notification: Notification) {
let userInfo = notification.userInfo