无法将时差设置为本地通知的时间间隔



我计算了 2 个计时的时差:

func timeDiff() {
    let time1 = currentTimeOutlet
    let time2 = alarmTimeOutlet
    let formatter = DateFormatter()
    formatter.dateFormat = "hh:mma"
    let date1 = formatter.date(from: time1!.text!)
    let date2 = formatter.date(from: time2!.text!)
    var elapsedTime = date2!.timeIntervalSince(date1!)
    if (elapsedTime < 0) {
        elapsedTime = elapsedTime + 86400
        UserDefaults.standard.set(elapsedTime, forKey: "TIME")
    }
    else {
        UserDefaults.standard.set(elapsedTime, forKey: "TIME")
    }
    elapsedTimeSecOutlet.text = String(elapsedTime)
    let hours = floor(elapsedTime / 60 / 60)
    let minutes = floor((elapsedTime - (hours * 60 * 60)) / 60)
    timeDiffOutlet.text = ("(Int(hours)) hr and (Int(minutes)) min")
}

我正在尝试将本地通知中的时间间隔设置为此计算的时间差(经过时间(,一旦我单击一个按钮:

@IBAction func defaultOnAction(_ sender: UIButton) {
    defaultOffOutlet.isHidden = false
    timeDiff()
    let center = UNUserNotificationCenter.current()
    center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
        if granted {
            print("Yay!")
        } else {
            print("Dh.")
        }
    }
    let content = UNMutableNotificationContent()
    content.title = "Rise & Shine"
    content.subtitle = "Let's start the day!!!!!!"
    let trigger = UNTimeIntervalNotificationTrigger(timeInterval: elapsedTime, repeats: false)
    let request = UNNotificationRequest(identifier: "timeElapsed", content: content, trigger: trigger)
    UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
}

当我将时间间隔设置为整数(例如 20.0(时,本地通知有效,但是当我将其替换为"经过时间"时,xcode 提示我将其更改为 TimeInterval(elapsedTime(。

我把它改成了TimeInterval(elapsedTime(。但是,当我构建应用程序时,构建成功,但一旦我单击按钮,应用程序就会崩溃。我已经检查了该按钮是否与其他代码一起使用,并且在我将时间间隔更改回整数后即可工作。

有人有什么建议吗?是否可以将我的时间间隔设置为变量?

非常感谢!

差方法更新。 尝试此代码以获取时差。我在 1 分钟后收到通知

let time1 = NSDate() //update your time
let minutes1: TimeInterval = 1 * 60
let time2 = Date() + minutes1 //update your time
var formatter = DateFormatter()
formatter.dateFormat = "HH:mm:ss"
let strdate1 = formatter.string(from: time1 as Date)
formatter.dateFormat = "HH:mm:ss"
let date1 = formatter.date(from: strdate1)
formatter = DateFormatter()
formatter.dateFormat = "HH:mm:ss"
let strdate2 = formatter.string(from: time2)
formatter.dateFormat = "HH:mm:ss"
let date2 = formatter.date(from: strdate2)
var elapsedTime = date2!.timeIntervalSince(date1!)
if (elapsedTime < 0) {
    elapsedTime = elapsedTime + 86400
    UserDefaults.standard.set(elapsedTime, forKey: "TIME")
}
else {
    UserDefaults.standard.set(elapsedTime, forKey: "TIME")
}

希望这对你有帮助。

最新更新