NSNotificationCenter addObserver в Swift при вызове частного метода
Я использую API addObserver
для получения уведомления:
NSNotificationCenter.defaultCenter().addObserver(self, selector: "methodOFReceivedNotication:", name:"NotificationIdentifier", object: nil)
и мой метод:
func methodOFReceivedNotication(notification: NSNotification){
//Action take on Notification
}
да, это работает!
но в то время как я меняю метод methodOFReceivedNotication
на закрытый:
private func methodOFReceivedNotication(notification: NSNotification){
//Action take on Notification
}
xCode отправьте мне сообщение об ошибке: unrecognized selector sent to instance
как вызвать частный метод, пока цель self
? Я не хочу раскрывать метод methodOFReceivedNotication
для любого другого.
Ответы
Ответ 1
Просто пометьте его модификатором dynamic
или используйте атрибут @objc
в объявлении метода
dynamic private func methodOFReceivedNotication(notification: NSNotification){
//Action take on Notification
}
или
@objc private func methodOFReceivedNotication(notification: NSNotification){
//Action take on Notification
}
Ответ 2
Считаете ли вы использование -addObserverForName:object:queue:usingBlock:
?
NSNotificationCenter.defaultCenter().addObserverForName("NotificationIdentifier", object: nil, queue: nil, usingBlock: {
[unowned self] note in
self.methodOFReceivedNotication(note)
})
или вместо вызова частного метода, просто выполнив действие.
NSNotificationCenter.defaultCenter().addObserverForName("NotificationIdentifier", object: nil, queue: nil, usingBlock: {
[unowned self] note in
// Action take on Notification
})
Ответ 3
NSNotificationCenter.defaultCenter(). addObserver (self, selector: "methodOFReceivedNotication:", name: "NotificationIdentifier", object: nil)
в iOS9 вы можете использовать:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(YourViewControllerName.methodOFReceivedNotication), name: "NotificationIdentifier", object: nil)