user3766930 user3766930 - 2 months ago 10
Swift Question

How can I pass received data through NSNotificationCenter in my swift ios app?

I'm implementing

socket.io
in my swift ios app.

Currently on several panels I'm listening to the server and wait for incoming messages. I'm doing so by calling the
getChatMessage
function in each panel:

func getChatMessage(){
SocketIOManager.sharedInstance.getChatMessage { (messageInfo) -> Void in
dispatch_async(dispatch_get_main_queue(), { () -> Void in
//do sth depending on which panel user is
})
}
}


However I noticed it's a wrong approach and I need to change it - now I want to start listening for incoming messages only once and when any message comes - pass this message to any panel that listens to it.

So I want to pass the incoming message through the NSNotificationCenter. So far I was able to pass the information that something happened, but not pass the data itself. I was doing that by:

NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(ViewController.showSpinningWheel(_:)), name: showSpinner, object: nil)


then I had a function called:

func showSpinningWheel(notification: NSNotification) {
{


and any time I wanted to call it I was doing:

NSNotificationCenter.defaultCenter().postNotificationName(hideSpinner, object: self)


So how can I pass the object
messageInfo
and include it in the function that gets called?

Answer

Pass info using userInfo which is a optional Dictionary of type [NSObject : AnyObject]?.

let imageDataDict:[String: UIImage] = ["image": image]
 // Post a notification
 NSNotificationCenter.defaultCenter().postNotificationName(hideSpinner, object: self, userInfo: imageDataDict)

and in showSpinningWheel

func showSpinningWheel(notification: NSNotification) {
if let image = notification.userInfo?["image"] as? UIImage {
  // do something with your image   
}

 }
Comments