【问题标题】:local notification not appearing (Swift4)本地通知未出现(Swift4)
【发布时间】:2018-12-27 21:47:02
【问题描述】:

我下面的代码应该用作闹钟。当日期和时间匹配时,什么都没有发生,但我在日志文件中看到了我的打印。请尝试此代码并测试我做错了什么。它似乎喜欢它以前的工作。如果用户不使用该应用程序,这应该仍会在后台关闭。

      import UIKit;import AVFoundation;import UserNotifications
class ViewController: UIViewController, UNUserNotificationCenterDelegate {var timer = Timer();var isGrantedAccess = false;var player: AVAudioPlayer?
    var passingDate : Date?
    @IBOutlet var dptext: UITextField!
    let datePicker = UIDatePicker()
    @IBOutlet var taskIDo: UITextView!



    override func viewWillAppear(_ animated: Bool)
    {
    createDatePicker()
        timer  = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(ViewController.testDate), userInfo: nil, repeats: true)
    }

    func playSound() {
        let url = Bundle.main.url(forResource: "fc", withExtension: "mp3")!
        do {
            player = try AVAudioPlayer(contentsOf: url)
            guard let player = player else { return }

            player.prepareToPlay();player.play()} catch let error as NSError {print(error.description)}}


func createDatePicker() {
    datePicker.datePickerMode = .dateAndTime
let toolbar = UIToolbar()
    toolbar.sizeToFit() 

    let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(donePressed))
    toolbar.setItems([doneButton], animated: false)

    dptext.inputAccessoryView = toolbar;dptext.inputView = datePicker
  }


    func testDate() {
        if Calendar.current.isDate(datePicker.date, equalTo: Date(), toGranularity: .minute) {
            if let passingDate = passingDate, Calendar.current.isDate(datePicker.date, equalTo: passingDate, toGranularity: .minute)
            {
                                    return
            }

            passingDate = datePicker.date


          if dptext.text != ""
            {

                let c = UNMutableNotificationContent()
                c.title = "Lets Roll"


                let t = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
                let r = UNNotificationRequest(identifier: "any", content: c, trigger: t)

                UNUserNotificationCenter.current().add(r, withCompletionHandler: nil)
                /////


                let when = DispatchTime.now() + 20
                DispatchQueue.main.asyncAfter(deadline: when) {



                }

            } else {
            print("No its not empty")}}}


func donePressed() {

    let dateFormatter = DateFormatter()
    dateFormatter.dateStyle = .short
    dateFormatter.timeStyle = .short
    dptext.text = dateFormatter.string(from: datePicker.date)
    self.view.endEditing(true)



    }}

【问题讨论】:

    标签: datepicker notifications avfoundation swift4 unusernotificationcenter


    【解决方案1】:

    一些事情:

    • 确保在 ViewController 中设置 UNUserNotificationCenter.current().delegate。
    • 如果您希望当应用程序处于前台时显示它,这是不正确的。您需要最小化应用程序才能看到内部通知。
    • 在您的应用委托中请求通知权限:

      center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in
                  // Enable or disable features based on authorization.
              }
      

    这是我用来测试您的配置的代码:

    import UIKit
    import AVFoundation
    import UserNotifications
    
    let center = UNUserNotificationCenter.current() // usernotification center
    
    class ViewController: UIViewController, UNUserNotificationCenterDelegate {
        var timer = Timer()
        var isGrantedAccess = false
        var player: AVAudioPlayer?
        var passingDate : Date?
        @IBOutlet var dptext: UITextField!
        let datePicker = UIDatePicker()
        @IBOutlet var taskIDo: UITextView!
    
        override func viewWillAppear(_ animated: Bool) {
    
            center.delegate = self
            createDatePicker()
            timer  = Timer.scheduledTimer(timeInterval: 10, target: self, selector: #selector(testDate), userInfo: nil, repeats: true)
    
        }
    
        func playSound() {
            let url = Bundle.main.url(forResource: "fc", withExtension: "mp3")!
            do {
                player = try AVAudioPlayer(contentsOf: url)
                guard let player = player else { return }
    
                player.prepareToPlay();player.play()} catch let error as NSError {print(error.description)}}
    
    
        func createDatePicker() {
            datePicker.datePickerMode = .dateAndTime
            let toolbar = UIToolbar()
            toolbar.sizeToFit()
    
            let doneButton = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(donePressed))
            toolbar.setItems([doneButton], animated: false)
    
            dptext.inputAccessoryView = toolbar;dptext.inputView = datePicker
        }
    
        @objc func testDate() {
            print("in testDate")
            if Calendar.current.isDate(datePicker.date, equalTo: Date(), toGranularity: .minute) {
                if let passingDate = passingDate, Calendar.current.isDate(datePicker.date, equalTo: passingDate, toGranularity: .minute)
                {
                    print("in return")
                    return
                }
    
                passingDate = datePicker.date
    
                let content = UNMutableNotificationContent()
                content.badge = true
                content.title = "Test"
                content.body = "Lets Roll!"
                content.sound = UNNotificationSound.default
    
                let t = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true)
                let r = UNNotificationRequest(identifier: "any", content: content, trigger: t)
    
                UNUserNotificationCenter.current().add(r, withCompletionHandler: { (error) in
                    dump(error)
                })
    
            }
        }
    
        @objc func donePressed() {
    
            let dateFormatter = DateFormatter()
            dateFormatter.dateStyle = .short
            dateFormatter.timeStyle = .short
            dptext.text = dateFormatter.string(from: datePicker.date)
            self.view.endEditing(true)
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多