【问题标题】:Schedule a local notification for a specific time in Swift 2在 Swift 2 中为特定时间安排本地通知
【发布时间】:2015-06-25 07:05:33
【问题描述】:

我浏览过这些论坛和其他网站,并且不断得到一些不合逻辑的答案。本质上,我想创建一个通知,例如在每个工作日的上午 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)

【问题讨论】:

    标签: xcode notifications uilocalnotification swift2


    【解决方案1】:

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

    步骤 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

    【讨论】:

      猜你喜欢
      • 2022-12-16
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 2018-01-11
      • 1970-01-01
      相关资源
      最近更新 更多