在Swift 2中安排特定时间的本地通知

时间:2015-06-25 07:05:34

标签: xcode notifications uilocalnotification swift2

我一直在这些论坛和其他网站上,我不断得到一些不加分的答案。基本上,我想创建一个通知,例如每个工作日在上午6:28,下午12:28和下午5:28发布。

我有一些解决方案,但我真的不确定去哪里。我是否正确地设置了这个?任何帮助表示赞赏。

let notification: UILocalNotification = UILocalNotification()
notification.category = "News and Sports"
notification.alertAction = "get caught up with the world"
notification.alertBody = "LIVE news and sports on VIC in just a minute!"
UIApplication.sharedApplication().scheduleLocalNotification(notification)

1 个答案:

答案 0 :(得分:7)

准备显示本地通知需要两个主要步骤:

第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。

第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)

不幸的是,根据this Stack Overflow answer @progrmr,

  

您无法使用UILocalNotification设置自定义重复间隔。之前已经问过这个问题(见下文)但是   仅提供有限的选项。 repeatInterval parameter specific values   是一种枚举类型,仅限于posted here

     

您不能将这些枚举相乘并得到它们的倍数   间隔。您不能设置超过64个本地通知   你的应用。除非通知,否则您无法重新安排通知   用户选择在通知触发时运行您的应用程序(他们可能会   不运行它)。

     

请求重复间隔乘数{{3}}。   您可以为其添加注释。我建议提交错误报告或功能   请求(网址?)与Apple。

许多其他Stack Overflow答案都会在上面的引号中确认声明。访问完整引用答案的链接,其中包含支持答案列表。

您的案例的潜在解决方法是安排3个本地通知。将每一个分别设置为分别在上午6:28 AM,下午12:28和下午5:28开火。然后,将所有3个本地通知的repeatInterval设置为.CalendarUnitWeekday