Are the new notifications not currently working in Swift 3?
I am doing:
NotificationCenter.default().post(name: DidTouchParticleView, object: self.particle as? AnyObject)
In a custom view's touchesBegan()
and I need to send the particle
object to the view controller if there is one. So I do this:
NotificationCenter.default().addObserver(forName: DidTouchParticleView,
object: self,
queue: OperationQueue.main(),
using: presentParticleDisplayView(notification:))
In a view controller's viewDidLoad()
. I am certain that that particular view controller is the one presented when I tap my custom view, however, the function presentParticleDisplayView(notification:)
is never called.
Also, DidTouchParticleView
is defined globally like this:
let DidTouchParticleView = NSNotification.Name("didTouchParticleView")
Is this due to the beta, or am I doing something wrong?
You're watching for yourself to post the notification (
object: self
). You probably mean something likeobject: particle
or possiblyobject: nil
in theaddObserver
call (but then be careful to make sure it's the right particle in the handler). Re-read the docs for this method and note carefully what theobject
parameter is for.Note that this version of
addObserver
returns an observer object. You must store that so you can later callremoveObserver
with it.It sounds like you may be intending to call
addObserver(_:selector:name:object:)
, where the second parameter message (theselector:
) is sent to the first parameter (the target).Instead, you are calling the wrong method,
addObserver(forName:object:queue:using:)
, which works quite differently.Also, as to the second part of your question:
That is correct (almost); it should be
All notification names are now
Notification.Name
instances. The proper way to do this is to say:You can then refer to the notification's name as
.didTouchParticleView
throughout your code.