3

Это только я, или NotificationCenter стал горячим беспорядком в Swift 3? :) У меня есть следующие настройки:NotificationCenter Crash in Swift 3

//Yonder.swift 
extension Notification.Name { 
    static let preferenceNotification = Notification.Name("preferencesChanged") 
} 

//I fire the notification elsewhere like this: 
NotificationCenter.default.post(name: .preferenceNotification, object: nil) 

В моем первом контроллере представления, это прекрасно работает:

//View Controller A <-- Success! 
NotificationCenter.default.addObserver(self, selector: #selector(refreshData), name: .preferenceNotification, object: nil) 

func refreshData(){ 
    //... 
} 

Но этот вид контроллер:

//View Controller B <-- Crash :(
NotificationCenter.default.addObserver(self, selector: #selector(loadEntries(search:)), name: .preferenceNotification, object: nil) 

func loadEntries(search:String?){ 
    //... 
} 

... вылетает с:

[NSConcreteNotification length]: непризнанный селектор s например,

Насколько я могу судить, мой наблюдатель настроен правильно. Любая идея, что я делаю неправильно?

+0

Возможный дубликат [NSNotifications в Swift 3] (http://stackoverflow.com/questions/38310080/nsnotifications-in-swift-3) –

ответ

3

Ваша проблема с вашим методом loadEntries(search:). Это не действительная подпись. Селектор, используемый с Notification Center, должен иметь либо параметры, либо только один параметр. И если у вас есть один параметр, этот параметр будет Notification, а не именем уведомления.

loadEntries Ваши потребности быть:

func loadEntries(_ notification: NSNotification) { 
    // Optional check of the name 
    if notification.name == .preferenceNotification { 
    } 
} 

И селектор должен был бы быть:

#selector(loadEntries(_:) 
+0

А, я вижу. Благодаря! –