UNTimeIntervalNotificationTrigger nextTriggerDate()是否给出错误的日期? [英] Does UNTimeIntervalNotificationTrigger nextTriggerDate() give the wrong date?

查看:126
本文介绍了UNTimeIntervalNotificationTrigger nextTriggerDate()是否给出错误的日期?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在更新本地通知以与iOS 10配合使用,但遇到了一个问题,我认为nextTrigger函数返回NOT下一次满足触发条件的日期。而是返回当前日期时间加上您最初设置的UNTimeInvervalNotificationTrigger的值。

I’m updating my localnotifications to work with iOS 10 and I’ve run into an issue where I think the nextTrigger function returns NOT "The next date at which the trigger conditions will be met." but instead returns whatever the current date time is PLUS what you had initially set the UNTimeInvervalNotificationTrigger to.

因此,如果您将触发器设置为在60秒内熄灭,请从文档中获取我希望当我调用nextTriggerDate()时,无论设置触发器+ 60秒时是什么日期时间,它都会返回它。因此,如果我将其设置为12:00:00,则我希望nextTriggerDate()为12:01:00。但是,我遇到的是,无论当前日期是+ 60秒,它都会返回。

So if you set the trigger to go off in 60 seconds, from the documentation I expect that when I call the nextTriggerDate() that I’d get it to return whatever the date time is when I set the trigger + 60 seconds. So if I set it at 12:00:00, I’d expect that the nextTriggerDate() would be 12:01:00. However what I’m experiencing is that it returns whatever the current date is + 60 seconds.

我写了一个示例,该示例安排了一个UNTimeIntervalNotificationTrigger,然后每秒打印出nextTriggerDate()。运行此命令时,我每秒都会得到一个新的nextTriggerDate。像这样:

I wrote a sample that schedules a UNTimeIntervalNotificationTrigger and then prints out the nextTriggerDate() every second. When I run this I get a new nextTriggerDate every second. Like this:

            //Optional(2016-11-03 21:26:31 +0000)
            //Optional(2016-11-03 21:26:32 +0000)
            //Optional(2016-11-03 21:26:33 +0000)
            //Optional(2016-11-03 21:26:34 +0000)
            //Optional(2016-11-03 21:26:35 +0000)
            //Optional(2016-11-03 21:26:36 +0000)

我用苹果开了一个TSI,但是……你知道……这需要一段时间。所以我想看看这里是否有人有任何见识。我怀疑这是一个错误,如果我获得更多信息,将对其进行更新。

I’ve opened a TSI with apple but… you know… that takes awhile. So I thought I’d see if anyone here had any insight. I suspect it’s a bug and if I get more information I’ll update this.

这是我用来说明问题的代码:

This is the code I’ve used to illustrate the issue:

import UIKit
import UserNotifications

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
    @IBOutlet weak var setButton: UIButton!

    @IBOutlet weak var timePicker: UIPickerView!

    weak var timer: Timer?

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func setButtonAction(_ sender: UIButton) {
        var mySecond = pickerSelection

        // build notification
        let content = UNMutableNotificationContent()
        content.title = "Title of notification"
        content.body = "This is the body of the notification"
        content.sound = UNNotificationSound.default()
        content.categoryIdentifier = "myCategory"

        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: Double(mySecond), repeats: false)

        let request = UNNotificationRequest(identifier: "test notification", content: content, trigger: trigger)

        UNUserNotificationCenter.current().add(request) {(error) in
            if let error = error {
                print("Uh oh! We had an error: \(error)")
            }
        }

        self.timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.tick), userInfo: nil, repeats: true)
    }

    let pickerData = [":00",":01",":02",":03",":04",":05",":06",":07",":08",":09",":10",":11",":12",":13",":14",":15",":16",":17",":18",":19",":20",":21",":22",":23",":24",":25",":26",":27",":28",":29",":30",":31",":32",":33",":34",":35",":36",":37",":38",":39",":40",":41",":42",":43",":44",":45",":46",":47",":48",":49",":50",":51",":52",":53",":54",":55",":56",":57",":58",":59"]


    var pickerSelection = 0


    override func viewDidLoad() {
        super.viewDidLoad()
        self.timePicker.dataSource = self
        self.timePicker.delegate = self
        self.timePicker.selectRow(pickerSelection, inComponent: 0, animated: false)
    }

    // The number of columns of data
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    // The number of rows of data
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return pickerData.count
    }

    // The data to return for the row and component (column) that's being passed in
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return pickerData[row]
    }

    func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
        let pickerLabel = UILabel()
        let titleData = pickerData[row]
        let myTitle = NSAttributedString(string: titleData, attributes: [NSFontAttributeName:UIFont(name: "Futura", size: 44.0)!])
        pickerLabel.attributedText = myTitle
        pickerLabel.textAlignment = .center

        return pickerLabel
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        pickerSelection = row
    }

    func tick() {
        let center = UNUserNotificationCenter.current()
        center.getPendingNotificationRequests(completionHandler: { (scheduledLocalNotifications) in
            for localNotice in scheduledLocalNotifications {
                var localTrigger = localNotice.trigger as! UNTimeIntervalNotificationTrigger

                var localTime = localTrigger.nextTriggerDate()
                // ** This output shows something like this:

                //Optional(2016-11-03 21:26:31 +0000)
                //Optional(2016-11-03 21:26:32 +0000)
                //Optional(2016-11-03 21:26:33 +0000)
                //Optional(2016-11-03 21:26:34 +0000)
                //Optional(2016-11-03 21:26:35 +0000)
                //Optional(2016-11-03 21:26:36 +0000)
                print("\(localTime)")     
            }
        })
    }
}


推荐答案

从Apple DTS那里听说,我被描述的功能就是它的工作方式。尽管我以为文档解释的方式有所不同,但他们告诉我文档对实现很乐观。无论如何,我通过在代码中跟踪触发日期来解决该问题。我希望这个答案可以对其他遇到与我一样的问题的人有所帮助。

Heard back from Apple DTS and was told that the functionality I'd described was how it was designed to work. Although I had thought the documentation explained it differently they told me that "the documentation was optimistic given the implementation." Anyway, I worked around it by keeping track of the fire date in my code. I hope this answer can help someone else who had the same problem I did.

这篇关于UNTimeIntervalNotificationTrigger nextTriggerDate()是否给出错误的日期?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆