本地通知未出现(Swift4)

时间:2018-12-27 21:47:03

标签: datepicker notifications avfoundation swift4 unusernotificationcenter

我下面的代码应该用作闹钟。当日期和时间匹配时,什么也没发生,但是我在日志文件中看到了我的打印内容。请尝试此代码,并测试我做错了什么。似乎喜欢它曾经工作过。如果用户不使用该应用程序,则该消息在后台仍会消失。

      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)



    }}

1 个答案:

答案 0 :(得分:0)

几件事:

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

    import sys
    # sys.setdefaultencoding() does not exist, here!
    reload(sys)  # Reload does the trick!
    sys.setdefaultencoding('UTF8')
    

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

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