无法识别的选择器 NotificationCenter Swift 3
Unrecognized Selector NotificationCenter Swift 3
我已经阅读了有关堆栈溢出的所有可能解决方案,但没有一个适合我。
我的密码是
func foo() {
NotificationCenter.default.addObserver(self, selector: #selector(fetchedUser(notification:)) , name: NSNotification.Name.init("dbReady"), object: nil)
loggedUser.fetchUserByUID(id: current.uid)
return true
}
func fetchedUser(notification:NSNotification){
let info = notification.object as! [String : AnyObject]
print(info)
}
在另一个 class 中,我:
NotificationCenter.default.post(name: NSNotification.Name.init("dbReady"), object: dictionary)
选择器的所有语法都不起作用
我试过:
1. fetchedUser
2. fetchedUser:
3. fetchedUser(notification:)
4. "fetchedUser:"
也许还有其他十个选项。谁能帮帮我?
在 Swift 3 中,(系统)通知具有此标准签名:
func notifFunction(_ notification: Notification)
所以你的函数应该是
func fetchedUser(_ notification: Notification){
对应的选择器是
#selector(fetchedUser(_:))
为方便起见,您可以使用 Notification.Name
的扩展名
extension Notification.Name {
static let databaseReady = NSNotification.Name("dbReady")
}
那你可以写
NotificationCenter.default.addObserver(self, selector: #selector(fetchedUser(_:)) , name: .databaseReady, object: nil)
和
NotificationCenter.default.post(name: .databaseReady, object: dictionary)
你可以试试这个:
NotificationCenter.default.addObserver(self, selector: #selector(YourClassName.fetchedUser), name: notificationName, object: nil)
class Observer {
init() {
let name = NSNotification.Name("TestNotification")
NotificationCenter.default.addObserver(self, selector: #selector(notificationDidTrigger), name: name, object: nil)
}
@objc func notificationDidTrigger(notification: Notification) {
print("Notification triggered ", notification.userInfo)
}
}
let obj = Observer()
let name = NSNotification.Name("TestNotification")
var notification = Notification(name: name, object: nil)
notification.userInfo = ["Name": "My notification"]
NotificationCenter.default.post(notification)
它适用于我的项目。
Post通知
let dic: [String:AnyObject] = ["news_id": 1 as AnyObject,"language_id" : 2 as AnyObject]
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "NotificationKeyIndentifier"), object: dic)
通知观察者
在需要观察的地方class添加以下代码。
NotificationCenter.default.addObserver(self, selector: #selector(self.handlePushNotification(notification:)), name: NSNotification.Name(rawValue: "NotificationKeyIndentifier"), object: nil)
这个是通知观察者观察到后触发的函数
func handlePushNotification(notification: NSNotification){
if let dic = notification.object as? [String: AnyObject]{
if let language_id = dic["language_id"] as? Int{
if let news_id = dic["news_id"] as? Int{
print(language_id)
print(news_id)
}
}
}
}
希望对您有所帮助。如果您对此有任何问题,请填写免费提问。
我的错误是名称不存在的选择器 "fetchedUserWithNotification:"。
我通过重写一个新的 class 并复制并粘贴其所有内容解决了我的问题。也许这是一个 Xcode 错误(恕我直言,最新版本已经很多了)
我已经阅读了有关堆栈溢出的所有可能解决方案,但没有一个适合我。
我的密码是
func foo() {
NotificationCenter.default.addObserver(self, selector: #selector(fetchedUser(notification:)) , name: NSNotification.Name.init("dbReady"), object: nil)
loggedUser.fetchUserByUID(id: current.uid)
return true
}
func fetchedUser(notification:NSNotification){
let info = notification.object as! [String : AnyObject]
print(info)
}
在另一个 class 中,我:
NotificationCenter.default.post(name: NSNotification.Name.init("dbReady"), object: dictionary)
选择器的所有语法都不起作用
我试过:
1. fetchedUser
2. fetchedUser:
3. fetchedUser(notification:)
4. "fetchedUser:"
也许还有其他十个选项。谁能帮帮我?
在 Swift 3 中,(系统)通知具有此标准签名:
func notifFunction(_ notification: Notification)
所以你的函数应该是
func fetchedUser(_ notification: Notification){
对应的选择器是
#selector(fetchedUser(_:))
为方便起见,您可以使用 Notification.Name
extension Notification.Name {
static let databaseReady = NSNotification.Name("dbReady")
}
那你可以写
NotificationCenter.default.addObserver(self, selector: #selector(fetchedUser(_:)) , name: .databaseReady, object: nil)
和
NotificationCenter.default.post(name: .databaseReady, object: dictionary)
你可以试试这个:
NotificationCenter.default.addObserver(self, selector: #selector(YourClassName.fetchedUser), name: notificationName, object: nil)
class Observer {
init() {
let name = NSNotification.Name("TestNotification")
NotificationCenter.default.addObserver(self, selector: #selector(notificationDidTrigger), name: name, object: nil)
}
@objc func notificationDidTrigger(notification: Notification) {
print("Notification triggered ", notification.userInfo)
}
}
let obj = Observer()
let name = NSNotification.Name("TestNotification")
var notification = Notification(name: name, object: nil)
notification.userInfo = ["Name": "My notification"]
NotificationCenter.default.post(notification)
它适用于我的项目。
Post通知
let dic: [String:AnyObject] = ["news_id": 1 as AnyObject,"language_id" : 2 as AnyObject]
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "NotificationKeyIndentifier"), object: dic)
通知观察者
在需要观察的地方class添加以下代码。
NotificationCenter.default.addObserver(self, selector: #selector(self.handlePushNotification(notification:)), name: NSNotification.Name(rawValue: "NotificationKeyIndentifier"), object: nil)
这个是通知观察者观察到后触发的函数
func handlePushNotification(notification: NSNotification){
if let dic = notification.object as? [String: AnyObject]{
if let language_id = dic["language_id"] as? Int{
if let news_id = dic["news_id"] as? Int{
print(language_id)
print(news_id)
}
}
}
}
希望对您有所帮助。如果您对此有任何问题,请填写免费提问。
我的错误是名称不存在的选择器 "fetchedUserWithNotification:"。 我通过重写一个新的 class 并复制并粘贴其所有内容解决了我的问题。也许这是一个 Xcode 错误(恕我直言,最新版本已经很多了)