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)