准备显示本地通知需要两个主要步骤:
步骤 1
在 iOS 8+ 上,您的应用必须询问并随后获得用户的许可才能显示本地通知。可以在您的 AppDelegate 中按以下方式请求许可。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
...
if #available(iOS 8, *) {
application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [.Sound, .Alert, .Badge], categories: nil))
}
return true
}
当您的应用在 iOS 8 之前的操作系统上运行时,请勿调用 registerUserNotificationSettings(_:)。否则,您的应用将在运行时崩溃。幸运的是,这应该不是问题,因为您使用的是 Swift 2。
第二步
将您的通知安排在未来的fireDate。
let notification:UILocalNotification = UILocalNotification()
...
... // set the notification's category, alertAction, alertBody, etc.
...
notification.fireDate = ... // set to a future date
UIApplication.sharedApplication().scheduleLocalNotification(notification)
不幸的是,根据@progrmr 的this Stack Overflow answer,
您不能使用UILocalNotification 设置自定义重复间隔。之前有人问过这个问题(见下文),但是
仅提供有限的选项。 repeatInterval parameter
是枚举类型,仅限于specific values。
你不能将这些枚举相乘并得到它们的倍数
间隔。您不能设置超过 64 个本地通知
你的应用程序。一旦通知触发,您将无法重新安排通知,除非
用户选择在通知触发时运行您的应用程序(他们可能
不要运行它)。
有重复间隔乘数posted here 的请求。
您可以向其中添加 cmets。我建议提交错误报告或功能
向 Apple 提出请求(网址?)。
许多其他 Stack Overflow 答案都证实了上述引文中的说法。访问完整引用答案的链接,其中包含支持答案的列表。
针对您的情况,一个可能的解决方法是安排 3 次本地通知。将每个设置分别在上午 6:28、下午 12:28 和下午 5:28 触发。然后,将所有 3 个本地通知的 repeatInterval 设置为 .CalendarUnitWeekday。