使用addObserver时NSNotificationCenter EXC_BAD_ACCESS?

时间:2013-01-13 19:42:52

标签: ios exc-bad-access sharekit nsnotificationcenter

我想弄清楚为什么我的应用程序中的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!")];
}

造成这种情况的原因是什么?

谢谢!

1 个答案:

答案 0 :(得分:3)

如果在发布通知时发生崩溃,则解决方案显然是已发布的目标。

NSNotificationCenter不保留已注册的观察员。您必须确保观察者在注册时仍处于活动状态,并且在发布之前它已取消注册。