2013-07-26 60 views
2

我想合併NSNotifications發生在很短的時間內。我試過如下:合併NS同名的通知

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

它看起來像我的通知是很好的被合併,而是當一個UI交互發生後,他們只發送。例如,我排隊了很多通知,但只有當我觸摸當前視圖控制器的tableView時纔會觸發它們。即使沒有UI交互,如何觸發它們?

編輯
我嘗試了不同的回帖風格:NSPostNow(或NSPostASAP)沒有做什麼,我需要(我的通知是不合並)

回答

1

見編輯

我沒有體驗這種機制(感謝讓我發現它)),但我認爲你正在尋找發佈風格NSPostNow

the docs

NSPostNow

該通知凝聚後立即公佈。

所以,你的代碼可能是這樣的:

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

編輯:更徹底地閱讀文檔後,(特別是NotificationQueuesRunLoopManagement),我覺得你的問題是,你張貼的通知只有在默認運行循環模式下。

從我的理解,我做了測試,你應該使用回帖風格NSPostingASAPNSPostingNow其實等同於在NSNotificationCenter調用postNotification,這不是你想要的)和後所有常見的運行循環模式(即,NSRunLoopCommonModes)。

即使在NSEventTrackingRunLoopMode循環模式(included in NSRunLoopCommonModes)中,這也會要求隊列儘快發佈通知。

[[NSNotificationQueue defaultQueue] enqueueNotification:[NSNotification notificationWithName:kMyNotificationName object:self] postingStyle:NSPostASAP coalesceMask:NSNotificationCoalescingOnName forModes:NSRunLoopCommonModes]; 
+0

我已經嘗試過發佈風格,但是我的通知不再與此發佈風格合併了。在我的情況下,我最多可以有4個需要合併的通知。我的猜測是,NSPostNow在2個通知合併後立即發佈通知。我需要合併超過2個通知(PS:很高興在這裏看到一位EPITA學生!) – MartinMoizard

+0

艾哈肯定是:)。看我的編輯你的答案。 –

+0

好吧,它的作品:)謝謝。這種方法的缺點是合併通知被觸發可能需要一段時間。當用戶界面需要更新通知時,並不是最好的想法。 – MartinMoizard