Post of NSNotificationCenter causing "EXC_BAD_ACCESS" exception
One of your subscribers has been deallocated. Make sure to call [[NSNotificationCenter defaultCenter] removeObserver:self]
in your dealloc (if not sooner).
EXC_BAD_ACCESS
can happen even after verifying dealloc exists like so:
- (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]}
The above will solve the problem most of the time, but apparently my cause was that I was indirectly adding the observer with a selector:
set to nil
as follows:
[NSNotificationCenter.defaultCenter addObserver:self selector:nil name:notificationName object:nil];
...so when I posted something with that notificationName
, EXC_BAD_ACCESS
occurred.
The solution was to send a selector that actually points to something.
I had the same issue in Swift. The problem was the function target had a closure
parameter with default value:
@objc func performFoo(completion: (() -> Void)? = nil) { ...}
After I replace the closure
parameter with a Notification
parameter, it worked:
@objc func performFoo(notification: Notification) { ...}
I had to make some refactor to make it works in a right way.