1

誰かが私の通知の問題を手伝ってくれることを願っています。正しく設定されているように見える通知がありますが、期待どおりに配信されません。ドキュメントベースのアプリを開発しています。デリゲート/ドキュメントクラスは、保存されたファイルから読み取るときに通知を投稿します。

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

ログに記録すると、保存したドキュメントを開くたびにこの行に到達することがわかります。

DrawViewクラスには、windowOpen通知とbsplinePolyファイルオープン通知のオブザーバーがあります。

[[NSNotificationCenter defaultCenter] addObserver:self
                                                          selector:@selector(mainWindowOpen:)
                                                          name:NSWindowDidBecomeMainNotification
                                                          object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
                                                          selector:@selector(savedBspline:)
                                                          name:notifyBsplinePolyOpened
                                                          object:nil];

- (void)        mainWindowOpen:(NSNotification*) note
{
        NSLog(@"Window opened");
        _mainWindow = [note object];
}

- (void) savedBspline:(NSNotification*) note
{
        NSLog(@"savedBspline called");
        NSLog(@"note is %@", [note name]);
}

振る舞いは奇妙です。メインウィンドウを保存して閉じて再度開くと、「Windowopened」メッセージが表示されますが「savedBsplinecalled」メッセージは表示されません。メインウィンドウを開いたままにして、以前に保存したセッションを開くと、「ウィンドウが開いています」というメッセージと「savedBsplineが呼び出されました」というメッセージが表示されます。

オンラインディスカッションとAppleDevCenterのドキュメントを検索しましたが、この問題は発生していません。

4

1 に答える 1

1

NSNotification配信は期待どおりに機能します(少なくとも、NSNotificationQueueが含まれていない場合)。それらは、他のスレッドではなく、遅延もなく、フィルタリングされずに、すぐに配信されます。

通知が発生したとき、または他の方法で実行順序を混同したときに、オブジェクトの一部がまだインスタンス化されていないと思います。保存されたファイルから読み取るときに通知を投稿すると、ウィンドウの保存と終了中の通知。

デバッグを支援するために、すべての通知をログに記録するだけの通知オブザーバーをアプリデリゲートに設定することをお勧めします。これで、すべての通知が期待どおりに配信されることが確実になります。

于 2010-04-26T19:23:18.733 に答える