如何在 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的主要内容,如果未能解决你的问题,请参考以下文章