我想弄清楚为什么我的应用程序中的addObserver调用在调用其选择器时会导致EXC_BAD_ACCESS。让我解释一下,我在调用MFMessageComposeView的方法中执行addObserver调用,然后在第三方库ShareKit中添加“didFinish”通知的观察者。现在,只要调用addObserver的选择器,就会引发EXC_BAD_ACCESS。此外,我的addObserver在NSObject类中,如果这有任何区别。
这是我用于addObserver的代码:
NSString *moredetailedshareText = [NSString stringWithFormat:@"Hey"];
[SHKTextMessage shareText:moredetailedshareText];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(SHKSharerFinished:) name:@"SHKFinishedCall" object:nil];
这是ShareKit中的postNotification调用:
- (void)sharerFinishedSending:(SHKSharer *)sharer
{
NSLog(@"finishedsending");
[[NSNotificationCenter defaultCenter] postNotificationName:@"SHKFinishedCall" object:sharer];
if (!sharer.quiet)
[[SHKActivityIndicator currentIndicator] displayCompleted:SHKLocalizedString(@"Saved!")];
}
造成这种情况的原因是什么?
谢谢!
答案 0 :(得分:3)
如果在发布通知时发生崩溃,则解决方案显然是已发布的目标。
NSNotificationCenter不保留已注册的观察员。您必须确保观察者在注册时仍处于活动状态,并且在发布之前它已取消注册。