1

セレクターを呼び出す必要があるときに、アプリでの 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!")];
}

これが機能しない原因は何ですか?

ありがとう!

4

1 に答える 1

3

通知が投稿されたときにクラッシュが発生した場合、ソリューションは明らかにリリース対象です。

NSNotificationCenter は、登録されたオブザーバーを保持しません。オブザーバーが登録されている間も生きていて、解放される前に登録解除されていることを確認する必要があります。

于 2013-01-13T20:15:35.257 に答える