gpt4 book ai didi

ios - 我怎么知道 UNUserNotificationCenter 的 removeAllPendingNotificationRequests() 何时完成?

转载 作者:技术小花猫 更新时间:2023-10-29 10:10:59 48 4
gpt4 key购买 nike

iOS 文档说 UNUserNotificationCenterremoveAllPendingNotificationRequests() 是异步的。

我想做的是:

  1. 调用 removeAllPendingNotificationRequests() 删除我所有的预定通知

  2. 安排一堆新通知,其中一些通知的 ID 可能与之前的相同,也可能不同

但是由于文档说该方法在另一个线程上异步运行(并且没有完成回调参数)我担心有时,根据线程和时间的变化无常等等,第 1 步仍然会因为我在第 2 步中创建内容,所以它也会终止我正在制作的一些新通知。

这种东西手动测试有点棘手,因为它取决于时间。所以我很好奇是否有人知道这是否是我应该担心的事情......

最佳答案

在添加通知的文档中我发现了这个:

Calling -addNotificationRequest: will replace an existing notification request with the same identifier.

也许解决方案是这样的:

  1. 创建新的通知请求
  2. 获取所有pending,只过滤掉不会被替换的
  3. 删除不替换
  4. 添加所有新通知
let center = UNUserNotificationCenter.current()
// Create new requests
let newRequests: [UNNotificationRequest] = [...]
let identifiersForNew: [String] = newRequests.map { $0.identifier }

center.getPendingNotificationRequests { pendingRequests in
// Get all pending notification requests and filter only the ones that will not be replaced
let toDelete = pendingRequests.filter { !identifiersForNew.contains($0.identifier) }
let identifiersToDelete = toDelete.map { $0.identifier }

// Delete notifications that will not be replaced
center.removePendingNotificationRequests(withIdentifiers: identifiersToDelete)

// Add all new requests
for request in newRequests {
center.add(request, withCompletionHandler: nil)
}
}

关于ios - 我怎么知道 UNUserNotificationCenter 的 removeAllPendingNotificationRequests() 何时完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45268666/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com