2017-06-19 7 views
1

Ich brauche Ihre Hilfe für ein Projekt.
Ich habe 3 Variablen, eine für den Tag, eine andere für den Monat und die letzte für das Jahr. Wie folgt aus:Swift 3 - Lokale Benachrichtigung zu einem bestimmten Datum

var year = 2017 var month = 06 var day = 19

mag ich eine Benachrichtigung senden, auch wenn die App der Nähe ist, wenn wir zum Zeitpunkt dieses variabel sind, aber ich bin nicht wirklich gut mit Kalender und Datum. Ich habe gerade diese App für den Moment gemacht.

let myNotification = Notification.Name(rawValue:"MyNotification") 

override func viewDidLoad() { 
    super.viewDidLoad() 

    let nc = NotificationCenter.default 
    nc.addObserver(forName:myNotification, object:nil, queue:nil, using:catchNotification) 
} 

override func viewDidAppear(_ animated: Bool) { 
    super.viewDidAppear(animated) 
    let nc = NotificationCenter.default 
    nc.post(name:myNotification, 
      object: nil, 
      userInfo:["message":"Hello there!", "date":Date()]) 
} 

func catchNotification(notification:Notification) -> Void { 
    print("Catch notification") 

    guard let userInfo = notification.userInfo, 
     let message = userInfo["message"] as? String, 
     let date  = userInfo["date"] as? Date else { 
      print("No userInfo found in notification") 
      return 
    } 

    let alert = UIAlertController(title: "Notification!", 
            message:"\(message) received at \(date)", 
     preferredStyle: UIAlertControllerStyle.alert) 
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)) 
    self.present(alert, animated: true, completion: nil) 
} 


Vielen Dank im Voraus

Antwort

1

Sie müssen eine lokale Benachrichtigung einrichten und eine UNCalendarNotificationTrigger verwenden Sie es zu einem bestimmten Zeitpunkt zu schießen.

let dateComponents = DateComponents(year: year, month: month, day: day) 
let yourFireDate = Calendar.current.date(from: dateComponents) 
let content = UNMutableNotificationContent() 
content.title = NSString.localizedUserNotificationString(forKey: 
      "Your notification title", arguments: nil) 
content.body = NSString.localizedUserNotificationString(forKey: "Your notification body", arguments: nil) 
content.categoryIdentifier = "Your notification category" 
content.sound = UNNotificationSound.default() 
content.badge = 1 

let dateComponents = Calendar.current.dateComponents(Set(arrayLiteral: Calendar.Component.year, Calendar.Component.month, Calendar.Component.day), from: yourFireDate) 
let trigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: false) 
let request = UNNotificationRequest(identifier: "Your notification identifier", content: content, trigger: trigger) 
UNUserNotificationCenter.current().add(request, withCompletionHandler: { error in 
     if let error = error { 
      //handle error 
     } else { 
      //notification set up successfully 
     } 
} 
+0

Was ist der Wert von "yourFireDate"? – Rombond

+0

ist ein 'Date'-Objekt, das Sie mit Ihren Variablen Jahr, Monat und Tag initialisieren. –

+0

Also setze ich 'let yourFireDate = Jahr + Monat + Tag' – Rombond

0

Hier ist eine Möglichkeit, Ihre benutzerdefinierten Ereignisse zum Kalender hinzuzufügen.

let store = EKEventStore() 
store.requestAccessToEntityType(.Event) {(granted, error) in 
    if !granted { return } 
    var event = EKEvent(eventStore: store) 
    event.title = "Event" 
    event.startDate = NSDate() //Event date 
    event.endDate = event.startDate.dateByAddingTimeInterval(60*60) //even duration ex.1hr 
    event.calendar =  store.defaultCalendarForNewEvents 
    do { 
     try store.saveEvent(event, span: .ThisEvent, commit: true) 
     self.savedEventId = event.eventIdentifier //save this id for future reference 
}  catch { 
    // Display error 
    } 
} 
+0

Wo haben Sie ein Hinweis auf Kalenderereignisse in der Frage? Bei der Frage ging es eindeutig darum, eine lokale Benachrichtigung zu einem bestimmten Datum zu senden, und es hat nichts mit der Einrichtung eines Kalenderereignisses zu tun. –

+0

Er hat in seiner Frage ein Kalender-Tag markiert. –

Verwandte Themen