ココアドキュメントベースのアプリ:通知
-
01-10-2019 - |
質問
誰かが私の通知の問題を手伝ってくれることを願っています。正しくセットアップされるように見える通知がありますが、期待どおりに配信されていません。ドキュメントベースのアプリを開発しています。 Delegate/ Documentクラスは、保存されたファイルから読み取られたときに通知を投稿します。
[[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]);
}
動作は奇妙です。メインウィンドウを保存して閉じて再開すると、「ウィンドウが開いた」メッセージが表示されますが、「savedbsplineと呼ばれる」メッセージは表示されません。メインウィンドウを開いたままにして、以前に保存したセッションを開くと、「ウィンドウが開いた」メッセージと「savedbsplineと呼ばれる」メッセージが表示されます。
オンラインディスカッションとApple Devcenterのドキュメントを検索しましたが、この問題は見ていません。
解決
NSNotification
配達は期待どおりに機能します(少なくともいいえ NSNotificationQueue
関与しています)。それらは他のスレッドではなく、遅延なしで、フィルタリングされていない、すぐに配信されます。
私は、あなたのオブジェクトのいくつかは、通知が発火したとき、またはあなたが他の方法で実行順序を混同したときにまだインスタンス化されていません:あなたは保存されたファイルから読んでいるときに通知を投稿すると言うが、あなたはあなたが欠落していると言うウィンドウの保存と閉鎖中の通知。
デバッグを支援するために、すべての通知を記録する単純にログインするアプリデリゲートに通知オブザーバーを設定することをお勧めします。すべての通知が予想どおりに配信されることを確信しています。