0
A
回答
0
簡單地做這樣的:
func fetchPendingNotifications() {
var queryNotifications = [CKQueryNotification]()
let operation = CKFetchNotificationChangesOperation(previousServerChangeToken: nil)
let operationQueue = OperationQueue()
operation.notificationChangedBlock = { notification in
if let queryNotification = notification as? CKQueryNotification {
queryNotifications.append(queryNotification)
}
}
operation.fetchNotificationChangesCompletionBlock = { _, error in
if error == nil {
self.perform(queryNotifications: queryNotifications) { _ in
//do sth on success
}
}
}
operationQueue.addOperation(operation)
}
輔助功能:
private func perform(queryNotifications: [CKQueryNotification], completion: ErrorHandler? = nil) {
var currentQueryNotifications = queryNotifications
if let queryNotification = currentQueryNotifications.first {
currentQueryNotifications.removeFirst()
if queryNotification.queryNotificationReason == .recordCreated || queryNotification.queryNotificationReason == .recordUpdated {
//fetch the record from cloud and save to core data
self.fetchAndSave(with: queryNotification.recordID!) { error in
if error == nil {
OperationQueue().addOperation(CKMarkNotificationsReadOperation(notificationIDsToMarkRead: [queryNotification.notificationID!]))
self.perform(queryNotifications: currentQueryNotifications, completion: completion)
} else {
completion?(error)
}
}
} else {
//delete record from coredata
self.delete(with: queryNotification.recordID!) { error in
if error == nil {
OperationQueue().addOperation(CKMarkNotificationsReadOperation(notificationIDsToMarkRead: [queryNotification.notificationID!]))
self.perform(queryNotifications: currentQueryNotifications, completion: completion)
} else {
completion?(error)
}
}
}
} else {
completion?(nil)
}
}
相關問題
- 1. 如何獲取所有待處理遠程通知的數組?
- 2. 提取通知待處理的輔助
- 3. 如何獲取ios上的所有收到的通知
- 4. 從通知欄獲取通知
- 5. 等待並通知
- 6. 等待Intent從通知未收到
- 7. 如何獲取所有JIRA通知?
- 8. 我想設置一個通知,當我收到通知時它應該響鈴
- 9. Windows Azure通知中心,我的應用程序沒有收到通知
- 10. Android:如何檢查是否發送了待處理的通知?
- 11. 如何在沒有AppDelegate的iOS中收到推送通知時收到通知?
- 12. 獲取通知我的FB
- 13. 如何處理通知類型的推送通知
- 14. 如何區分背景通知分接到應用內收到的通知?
- 15. 如何獲取所有應用程序的所有通知都有自定義通知正在運行
- 16. 處理EKEventStoreChangedNotification通知
- 17. PostgreSQL通知處理
- 18. 如何通過服務處理通知?
- 19. iCloud有哪些可用的通知?
- 20. loginwindow通知或獲取有關用戶註銷的通知
- 21. Android收到通知
- 22. Xamarin Android使用Azure通知中心沒有收到通知
- 23. 如何清除通知托盤中的所有通知android
- 24. java.lang.IllegalMonitorStateException等待並通知
- 25. 等待並通知協調
- 26. 等待並通知問題
- 27. 如何通過點擊Toast通知打開我的應用程序時從Toast通知中獲取數據?
- 28. 如何在通知顯示在後臺之前處理通知?
- 29. 如何獲取通知ID?
- 30. android中的通知處理