Wdrażam socket.io
w mojej szybkiej aplikacji na iOS.
Obecnie na kilku panelach słucham serwera i czekam na przychodzące wiadomości. Robię to, wywołując getChatMessage
funkcję w każdym panelu:
func getChatMessage(){
SocketIOManager.sharedInstance.getChatMessage { (messageInfo) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//do sth depending on which panel user is
})
}
}
Zauważyłem jednak, że jest to złe podejście i muszę to zmienić - teraz chcę zacząć nasłuchiwać przychodzących wiadomości tylko raz, a gdy nadejdzie jakakolwiek wiadomość - przekaż tę wiadomość do dowolnego panelu, który jej nasłuchuje.
Dlatego chcę przekazać przychodzącą wiadomość przez NSNotificationCenter. Do tej pory udało mi się przekazać informację, że coś się stało, ale nie przekazałem samych danych. Robiłem to poprzez:
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.showSpinningWheel(_:)), name: showSpinner, object: nil)
wtedy miałem funkcję o nazwie:
func showSpinningWheel(notification: NSNotification) {
}
i za każdym razem, gdy chciałem to nazwać, robiłem:
NSNotificationCenter.defaultCenter().postNotificationName(hideSpinner, object: self)
Jak więc mogę przekazać obiekt messageInfo
i dołączyć go do wywoływanej funkcji?
yourValue
w funkcji, która jest wywoływana w tym powiadomieniu (w showSpinningWheel
)?
.userinfo
notification.userinfo
NSNotificationCenter.defaultCenter().postNotificationName("hideSpinner", object: nil, userInfo: yourvalue)