NSNotificationCenter的post导致“EXC_BAD_ACCESS”exception
UIViewController
将自己添加到默认中心:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(editFood) name:@"editFood" object:nil];
然后一个UITableView
委托NSObject发布一个NSNotification
:
[[NSNotificationCenter defaultCenter] postNotificationName:@"editFood" object:self];
在运行期间,它会得到一个EXC_BAD_ACCESSexception。
defaultCenter
是否在某处被释放? 当我从UIViewController发布通知给UIViewController的时候,这个概念是可行的,但是这不应该有问题,对吧?
您的一位用户已被释放。 确保在dealloc中调用[[NSNotificationCenter defaultCenter] removeObserver:self]
(如果不早的话)。
EXC_BAD_ACCESS
即使在validationdealloc之后也可能发生,如下所示:
- (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self] }
以上将解决大部分时间的问题,但显然我的原因是我间接添加了一个selector:
的观察者selector:
设置nil
如下:
[NSNotificationCenter.defaultCenter addObserver:self selector:nil name:notificationName object:nil];
…所以当我发布的东西与notificationName
, EXC_BAD_ACCESS
发生。
解决scheme是发送一个select器,实际上指向一些东西。