2

xcodeとObjectiveCを使用して、iOSアプリ、iOS5以降で作業しています。現在、nsnotificationsをいじっていますが、少し混乱しているので、いくつかの説明が必要です。オブザーバーを追加して好きなビューコントローラーがあるとしましょう

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showContent:) name:kTPSShowContentNotification object:self];

ここで、オブジェクトはselfに設定されています。私はこれを、そのオブジェクトから送信された場合にのみその通知から見ていることを意味すると解釈しました。私はそれについて間違っていますか?

コードの他の場所で私はそのような通知を提示しています

 [[NSNotificationCenter defaultCenter] postNotificationName:kTPSShowContentNotification object:currentVC];

ここで、currentVCは、オブザーバーが最初に設定されているビューコントローラーです。投稿が通知センターにそのViewControllerから通知を送信するように指示しているので、その通知をキャッチするために必要なのはこれだけだと思いました。しかし、それを捕まえることができず、理由がわかりません。オブザーバーを追加するときにオブジェクトをnilに設定すると、オブジェクトがキャッチされますが、その通知のオブザーバーを持つ他のすべてのビューコントローラー(存在する場合)もキャッチされます。これを回避する方法はありますか?私はこれに完全に間違ってアプローチしていますか?

4

2 に答える 2

2

ObjectSendingNotificationオブジェクトからのみ通知を受け取る には、次の ように記述します。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showContent:) name:kTPSShowContentNotification object:theObjectSendingNotification];

通知を送信するオブジェクトは、この方法で送信する必要があります

 [[NSNotificationCenter defaultCenter] postNotificationName:kTPSShowContentNotification object:self];
于 2012-05-30T11:38:49.263 に答える
1

私がこれを正しく理解しているなら、あなたは同じコントローラーから通知を投稿して受け取りたいと思うでしょう。したがって、次のようなことができます。

 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(showContent:) name:kTPSShowContentNotification object:self];

 [[NSNotificationCenter defaultCenter] postNotificationName:kTPSShowContentNotification object:self];

currentVCただし、 ivarがまったく同じコントローラーを指している場合は、実際に機能するはずです。あなたがそれが機能しないと言うという事実は、それがあなたのコントローラーの同じインスタンスを指していないと私に信じさせます。

于 2012-05-30T11:39:15.327 に答える