2012-01-23 7 views
0

私のアプリケーションでNSNotificationCenterにオブザーバーの問題があります。1つのクラスのNSNotificationCenterに1つの名前を持つ2人のオブザーバーを追加

私のAppDelegateクラスは、NewsServiceというサービスを呼び出すための2つのサービスクラスを持っています(& NewsService)。

この2つのサービスクラスは、1つのQueueloaderクラスを単独で使用します。

2人のオブザーバがappdelegateクラスのサービスロード操作をリッスンすると、エラーが返され、クラッシュします。

APP DELEGATE CLASS

ExhibitionLoaderService *exhibitionService = [[ExhibitionLoaderService alloc] init]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(exhitibionServiceComplete :) name:**CserviceComplete** object:nil]; 

[exhibitionService load]; 

NewsLoaderService *newsService = [[NewsLoaderService alloc] init]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(newsServiceComplete :) name:**CserviceComplete** object:nil]; 

[newsService load]; 

ExhibitionLoaderService.m & NewsLoaderService私は

をGOT同じ方法

-(void)load 
{ 
    Queueloader *que = [[Queueloader alloc] initWithPath:CExhibitionURLPath isVerbose:NO]; 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didQueComplete:) name:CdidQueueloaderComplete object:nil]; 
    [que startOperation]; 
    [que release]; 
} 

ERRORを持っています

[[NSNotificationCenter defaultCenter] postNotificationName:**CdidQueueloaderComplete** object:results]; 

2サービスクラスにはCdidQueueloaderCompleteがあります...問題はオブザーバーについてですがどのようにですか?何?
PS。プログラム受信信号EXC_BAD_ACCESS。

ありがとうございました。

答えて

1

複数のオブザーバーが同じ通知を受け取っても問題ありません。あなたの説明する問題は、あなたのオブザーバーの生涯に関連しているように聞こえる。

まだ通知を受信するために登録されているオブジェクトの割り当てを解除すると、NSNotificationCenterはそのことを知りません。将来通知が届くと、センターはそれをまだ聞いていると思うオブジェクトに転送しますが、それがなくなり、クラッシュします。

この問題を解決するには、オブジェクトが破壊される前にオブザーバーとして確実に削除されていることを確認します。これを行うには2つの方法があります。

  • オブジェクトが起動したり、通知を聞いて停止し、それはおそらく、例えば(停止すべきときは、必ずあなたがオブザーバーとしてそれを削除することができなければならないとき、多くの場合、あなたは知っていますよビューコントローラは、ビューが表示されたときにモデルの更新をリスニングし、ビューが消えたときにリスニングを停止する必要があります)
  • 他の場合、オブジェクトは独自の通知ライフサイクルを捉えることができます。

どのようなやり方でも、オブザーバを追加してオブザーバを削除すると、オブジェクトがなくなると通知センターに登録されなくなります。

+0

私は、この例では非常に簡単なラインコードを作成しました。それが実行されるとき、あなたは私の問題が何かを見るでしょう。あなたがそれをチェックしたいなら、これはリンクです。 www.mobilbuzz.com/stackoverflow/NotificationCenterExample.zip – selcuk

関連する問題