2017-02-20 63 views
0

從某個按鈕單擊事件發佈NSNotificationCenter的通知因此,當我有快速按鈕事件多次通知被調用導致許多問題。我想在發生快速事件時取消之前發佈的通知。如何處理下面的代碼。刪除先前發佈的通知

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

UPDATE:

讓我解釋清楚我想要什麼其實我有一個觀察者方法時,點擊一個按鈕時發生的,我想發佈一些通知,以控制諸如改變某些UI元素按鈕圖像。問題是,當我點擊按鈕迅速觀察員被調用很多次,以及我的通知張貼在相同的計數,因此UI閃爍我無法控制按鈕上的觀察者點擊事件我只控制發佈的事件從我身邊。

任何幫助非常感謝。

+0

你在哪裏添加你的觀察者? – Matt

+0

@Matt一些其他類的基礎上,我正在執行一些操作,如更改按鈕圖像。 – Vishnuvardhan

+0

如果已經發布,你不應該發佈通知 – Matt

回答

1

NSNotificationCenter.post()是同步的。直到所有的觀察者都完成了他們的行動,它纔會回來。所以沒有辦法取消它。沒有隊列。

如果您正在生成大量彼此非常接近的通知(特別是在相同的運行循環週期中),則可以使用NSNotificationQueueenqueueNotification合併它們。通常是這樣的:

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

這就是說,如果這是綁定到按鈕點擊(人爲交互),那麼通知可能在計算機方面相距甚遠。半秒鐘是計算機方面的永恆。如果是這樣的話,您可能會更好地通過禁用按鈕直到您願意接受另一次點擊(例如button.enabled = false),從而在用戶界面中首先進行控制。

可以編寫一個可以在任意期間合併操作的包裝器,但這很可能會讓您感到困惑,因爲用戶將能夠點擊系統將忽略的某些內容。如果這仍然是你想要的,我會看看我是否可以找到一個合併蹦牀的例子(我用ObjC寫過它們,但我手邊沒有Swift例子)。

+0

更好的方法。 OP應該在UI本身防止這種情況。 –