如何在 iOS 中只发布一次 UILocalNotifivcation

Posted

技术标签:

【中文标题】如何在 iOS 中只发布一次 UILocalNotifivcation【英文标题】:How to Post a UILocalNotifivcation only once in iOS 【发布时间】:2017-06-07 06:03:27 【问题描述】:

我在 ios 中发布通知,我不想重复我使用的通知代码。

let notification = UILocalNotification()
notification.timeZone = NSTimeZone.local
//calculation of dateTime
notification.fireDate = dateTime as Date?


notification.repeatInterval = 0

notification.alertBody = "Body"
notification.userInfo = ["title": "Notify", "type": "title", "5436" : "Notify"]

在那种情况下,我的通知没有触发。当我给喜欢的时候

notification.repeatInterval = NSCalendar.Unit.day

它正在触发..这是功能还是问题?如何在没有重复间隔的情况下发布通知

【问题讨论】:

我只想显示一次通知,不需要重复 试试这个 notification.repeatInterval = NSCalendar.Unit(rawValue: 0) 我建议调试dateTime的值 这个dateTime 来自哪里?您能否验证此日期时间是在未来而不是过去? @Spynet 我不想重复了 【参考方案1】:

解决方案 1: 你可以使用dispatch_once:

static var token: dispatch_once_t = 0

dispatch_once(&token) 
  NSLog("Do it once")

解决方案 2:

取自 Apple 文档:

如果您指定一个日历单位,例如每周 (NSWeekCalendarUnit) 或 每年(NSYearCalendarUnit),系统重新安排通知 以指定的时间间隔交货。默认值为 0,即 意思是不要重复。

我假设您想取消具有重复间隔的通知,您可以通过两种方式做到这一点:

取消所有通知。

仅取消该通知。

第一个选项很简单,使用:

cancelAllLocalNotifications 在您的应用委托中。

第二个需要更多的工作。您需要检查待处理的通知(使用 scheduleLocalNotifications)并取消通知。

为了知道哪些通知将被取消,您可以在设置通知时使用 userInfo 属性。例如,为每个通知设置一个唯一 ID,这样当您取消该通知时,您只需将该 ID 与 scheduleLocalNotifications 数组中的所有 ID 进行比较。

【讨论】:

你能解释一下 dispatch_once 方法吗.. 我没听懂你 发布通知的对吗?重复间隔的值应该是多少? @Saranjith 只需在您的 notification.repeatInterval = NSCalendar.Unit.day 之后添加这一行 UIApplication.sharedApplication().cancelAllLocalNotifications()

以上是关于如何在 iOS 中只发布一次 UILocalNotifivcation的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中只执行一次代码?

如何在条件渲染中只渲染一次元素?

如何确保某个 ID 在核心数据中只出现一次?

如何在反应中只运行一次功能

如何在 NuxtJS 中只渲染一次组件?

如何在 Vue 中只执行一次方法?