2013-01-13 46 views
1

我想弄清楚爲什麼我的應用程序中的addObserver調用在調用選擇器時導致EXC_BAD_ACCESS。讓我再解釋一下,我在調用MFMessageComposeView的方法中執行addObserver調用,然後在第三方庫ShareKit中爲「didFinish」通知添加觀察者。現在無論何時調用addObserver的選擇器,都會引發EXC_BAD_ACCESS。如果這有什麼區別,我的addObserver也在NSObject類中。使用addObserver時,NSNotificationCenter EXC_BAD_ACCESS?

這是我使用的的addObserver代碼:

 NSString *moredetailedshareText = [NSString stringWithFormat:@"Hey"]; 
     [SHKTextMessage shareText:moredetailedshareText]; 
     [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(SHKSharerFinished:) name:@"SHKFinishedCall" object:nil]; 

這是postNotification呼叫ShareKit:

- (void)sharerFinishedSending:(SHKSharer *)sharer 
{ 
    NSLog(@"finishedsending"); 
    [[NSNotificationCenter defaultCenter] postNotificationName:@"SHKFinishedCall" object:sharer]; 
    if (!sharer.quiet) 
     [[SHKActivityIndicator currentIndicator] displayCompleted:SHKLocalizedString(@"Saved!")]; 
} 

會。這是什麼原因不工作?

謝謝!

+0

你打開[殭屍](http://stackoverflow.com/a/4917557/1354100)?可能ShareKit釋放已經發布的東西,你使用ARC嗎? – Bejmax

+0

沒有ShareKit沒有使用ARC。我沒有打開殭屍,但我不認爲這會有所幫助。 –

+0

我沒有問過如果ShareKit使用ARC,我問你是否在你的構建中啓用了ARC。 NSZombiesEnabled將爲您提供更多關於什麼時候不應該被釋放的信息。 – Bejmax

回答

3

如果在發佈通知時發生崩潰,則解決方案顯然是已發佈的目標。

NSNotificationCenter不保留已註冊的觀察者。您必須確保觀察員在註冊時仍然活着,並且在發佈之前它未註冊。

+1

應該調用addObserver方法時發生崩潰。所以,當sendDidFinish通知應該被調用,那是它崩潰的地方。 –

相關問題