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

文档

NSPostNow

合并后立即发布通知。

因此,您的代码可能如下所示:

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

编辑:在更彻底地阅读了文档(特别是NotificationQueuesRunLoopManagement)之后,我认为您的问题是您仅在默认运行循环模式下发布通知。

根据我的理解和我所做的测试,您应该使用发布样式NSPostingASAPNSPostingNow实际上相当于调用postNotificationNSNotificationCenter这不是您想要的)并发布所有常见的运行循环模式(即。NSRunLoopCommonModes)。

这将要求队列尽快发布通知,即使在NSEventTrackingRunLoopMode循环模式期间(包含在 中NSRunLoopCommonModes)。

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