我正在更新我的本地通知以与iOS 10一起工作,并且遇到了一个问题,我认为nextTrigger函数返回NOT“触发条件满足的下一个日期”,而是返回当前日期时间是PLUS你最初设置的UNTimeInvervalNotificationTrigger。UNTimeIntervalNotificationTrigger nextTriggerDate()是否给出错误的日期?
因此,如果您设置触发器在60秒内关闭,从文档中我期望当我调用nextTriggerDate()时,我会让它返回任何日期时间,当我设置触发器+ 60秒。所以如果我在12:00:00设置它,我期望nextTriggerDate()将是12:01:00。然而我所经历的是,无论当前日期是+ 60秒,它都会返回。
我写了一个示例,它计划一个UNTimeIntervalNotificationTrigger,然后每秒钟打印出nextTriggerDate()。当我运行这个时,我每秒都会得到一个新的nextTriggerDate。像这样:
//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,但是......你知道......需要一段时间。所以我想我会看看这里有没有人有任何见解。我怀疑这是一个错误,如果我得到更多的信息,我会更新这个。
这是我用来说明问题的代码:
进口的UIKit 进口UserNotifications
类的ViewController:UIViewController中,UIPickerViewDelegate,UIPickerViewDataSource { @IBOutlet弱变种SET按钮: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)")
}
})
}
}
我遇到了和你一样的问题。 在我看来,如果我在12点设置60分钟的时间间隔,触发器的下一个日期是13点。但是,当我从UNNotificationCenter获取request.trigger时,我打印了trigger.nextTriggerDate。日期不是13点。更何况,如果我在不同的时间打印它,价值会发生变化。 无论如何,谢谢你的anwser,它的工作原理。 – user7097837