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]; 

…所以当我发布的东西与notificationNameEXC_BAD_ACCESS发生。

解决scheme是发送一个select器,实际上指向一些东西。