删除以前发布的通知

时间:2017-02-20 05:24:11

标签: ios swift notifications nsnotificationcenter

在特定按钮点击事件上发布来自NSNotificationCenter的通知因此,当我有快速按钮事件时,多次调用通知会导致许多问题。我想在快速事件发生时取消之前发布的通知。如何处理以下代码。

func buttonClick() {    
// I want to cancel the previous Event here
NSNotificationCenter.defaultCenter().postNotificationName("Event", object: self)
}

更新

让我清楚地解释一下我想要什么实际上当我发布按钮点击时我有一个观察者方法我想发布一些通知来控制一些UI元素,比如更改按钮图像。问题是,当我快速按下按钮观察者被多次调用以及我的通知被发布在相同的计数上因此UI闪烁我无法控制按钮点击事件上的Observer我只能控制发布的事件在我身边。

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:1)

NSNotificationCenter.post()是同步的。直到所有观察者都执行了他们的行动,它才会返回。所以没有办法取消它;没有队列。

如果您生成的通知非常接近(特别是在相同的运行循环周期内),您可以使用NSNotificationQueueenqueueNotification来合并它们。通常类似于:

NSNotificationQueue.defaultQueue().enqueNotification(note, postingStyle: .whenIdle)

也就是说,如果这与按钮点击(人工交互)相关联,那么通知在计算机术语中可能相差甚远。半秒钟是计算机术语中的永恒。如果是这种情况,通过禁用按钮直到您愿意接受另一次点击(例如使用button.enabled = false),您可能最好在UI处首先控制此项。

可以编写一个在任意时间段内合并操作的包装器,但在您的情况下这可能会令人困惑,因为用户将能够单击系统将忽略的内容。如果那仍然是你想要的,我会看看我是否能找到一个合并蹦床的例子(我在ObjC中写过它们,但我手边没有Swift示例)。