2013-01-13 3 views
1

내 애플릿에서 호출해야 할 때 내 앱에서 내 addObserver 호출이 EXC_BAD_ACCESS를 일으키는 이유를 알아 내려고합니다. 좀 더 설명해 드리겠습니다. MFMessageComposeView를 호출하는 메소드에서 addObserver 호출을 수행 한 다음 3rd party 라이브러리 인 ShareKit에서 "didFinish"통지에 대한 옵저버를 추가합니다. 이제 addObserver의 selector가 호출 될 때마다 EXC_BAD_ACCESS가 발생합니다. 또한 addObserver가 NSObject 클래스에 있으면 차이가 있습니다.addObserver를 사용할 때 NSNotificationCenter EXC_BAD_ACCESS?

 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!")]; 
} 

이의 원인이 될 것입니다 무엇 작동하지

이 내가 addObserver에 사용하는 코드는?

감사합니다.

+0

[좀비] (http://stackoverflow.com/a/4917557/1354100)를 사용 설정 했습니까? 아마도 ShareKit에서 이미 출시 된 것을 해제하고 있습니다. ARC를 사용하고 있습니까? – Bejmax

+0

아니요 ShareKit에서 ARC를 사용하지 않습니다. 나는 좀비를 켜지 않았지만 도움이 될 것이라고 생각하지 않는다. –

+0

ShareKit에서 ARC를 사용하는지 묻지 않았습니다. 빌드에서 ARC를 사용하도록 설정했는지 묻는 것입니다. NSZombiesEnabled는 그것이 출시되어서는 안되는시기에 정확히 출시 될 정보를 제공합니다. – Bejmax

답변

3

알림이 게시 될 때 충돌이 발생하는 경우 솔루션은 분명히 출시 된 대상입니다.

NSNotificationCenter는 등록 된 옵서버를 보유하지 않습니다. 관찰자가 등록되어있는 동안 관찰자가 아직 살아 있고 공개되기 전에 등록이 해제되었는지 확인해야합니다.

+1

addObserver 메소드를 호출해야 할 때 충돌이 발생합니다. 따라서 sendDidFinish 알림을 호출해야하는 경우 충돌이 발생합니다. –