2

NSNotifications短時間でマージしようとしています。私は次のことを試しました:

[[NSNotificationQueue defaultQueue] enqueueNotification:[NSNotification notificationWithName:kMyNotificationName object:self]postingStyle:NSPostWhenIdle coalesceMask:NSNotificationCoalescingOnName forModes:nil];

私の通知は適切にマージされているように見えますが、UI インタラクションが発生した場合にのみ送信されます。たとえば、多くの通知をキューに入れますが、現在のビュー コントローラーの tableView に触れたときにのみ発生します。UI インタラクションがない場合でもそれらを起動する方法は?

編集
別の投稿スタイルを試しました: NSPostNow (または NSPostASAP) は必要なことを行いません (私の通知はマージされません)

4

1 に答える 1

1

編集を見る

私はこのメカニズムの経験がありません (発見させてくれてありがとう ;)) が、投稿スタイルを探していると思いますNSPostNow

ドキュメントから:

NSポストナウ

通知は合体直後に投稿されます。

したがって、コードは次のようになります。

[[NSNotificationQueue defaultQueue] enqueueNotification:[NSNotification notificationWithName:kMyNotificationName object:self] postingStyle:NSPostNow coalesceMask:NSNotificationCoalescingOnName forModes:nil];

編集:ドキュメントをより徹底的に読んだ後(特にNotificationQueuesRunLoopManagement )、あなたの問題は、デフォルトの実行ループモードでのみ通知を投稿していることだと思います。

私の理解と私が行ったテストから、投稿スタイルを使用する必要がありますNSPostingASAP(実際には、NSPostingNowを呼び出すのと同じです。それはあなたが望むものではありません)。postNotificationNSNotificationCenterNSRunLoopCommonModes

NSEventTrackingRunLoopModeこれにより、ループ モード (に含まれるNSRunLoopCommonModes)でも、できるだけ早く通知を送信するようにキューに要求されます。

[[NSNotificationQueue defaultQueue] enqueueNotification:[NSNotification notificationWithName:kMyNotificationName object:self] postingStyle:NSPostASAP coalesceMask:NSNotificationCoalescingOnName forModes:NSRunLoopCommonModes];
于 2013-07-26T09:07:21.727 に答える