user3766930 user3766930 - 10 months ago 44
Swift Question

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

I'm implementing
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
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
and include it in the function that gets called?

Answer Source

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