2016-07-30 24 views
0

Ich habe ein Problem mit meinem Code.So legen Sie eine wöchentliche lokale Benachrichtigung in swift fest

Ich möchte eine lokale Benachrichtigung in xcode7 einstellen, ich entwickle einen Kalender, wo Sie die Kurse Ihrer Universität setzen können, die Sache ist, dass ich den Zeitplan aus einer JSON-Datenbank bekomme und ich 15 min vorher benachrichtigen möchte Die Klasse beginnt, aber ich weiß nicht, warum mein Code nicht funktioniert.

Dies ist ein Beispiel, wo ich die Benachrichtigung jeden Montag um 13:40 Uhr wiederholen möchte.

Kann ich nur den Tag und die Stunde einstellen? oder soll ich auch den Monat und das Jahr angeben?

var dateComp:NSDateComponents = NSDateComponents() 

    dateComp.day = 01; 
    dateComp.hour = 13; 
    dateComp.minute = 40; 
    dateComp.timeZone = NSTimeZone.systemTimeZone() 

    var calender:NSCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)! 
    var date:NSDate = calender.dateFromComponents(dateComp)! 

    let notification = UILocalNotification() 
    notification.fireDate = date 
    notification.alertBody = "Swipe to unlock" 
    notification.alertAction = "You've got a class soon!" 
    notification.soundName = UILocalNotificationDefaultSoundName 
    notification.userInfo = ["CustomField1": "w00t"] 
    notification.repeatInterval = NSCalendarUnit.WeekOfYear 

    UIApplication.sharedApplication().scheduleLocalNotification(notification) 
+0

Sie benötigen eine Benachrichtigung Zeitzone lokalen –

+0

setzen http://stackoverflow.com/a/34575836/2303865 –

Antwort

0

überprüfen Sie bitte diese Funktion

func setLNotification(weekDay:Int , hour:Int, min:Int, second:Int, alertBody:String, type:String, isRepeate:Bool){ 
    let calender = NSCalendar(identifier: NSCalendarIdentifierGregorian) 
    let dateComp: NSDateComponents? 
    let components: NSDateComponents = NSDateComponents() 

    if weekDay > 0{ 
     components.setValue(-50, forComponent: NSCalendarUnit.Year) 

     let previousDate = NSCalendar.currentCalendar().dateByAddingComponents(components, toDate: NSDate(), options: NSCalendarOptions(rawValue: 0))! 
     dateComp = calender?.components([.Year,.WeekOfMonth,.Month], fromDate: previousDate) 
     dateComp?.hour = hour 
     dateComp?.minute = min 
     dateComp?.second = second 
     dateComp?.weekday = weekDay 
    }else{ 
     components.setValue(hour, forComponent: NSCalendarUnit.Hour) 
     components.setValue(min, forComponent: NSCalendarUnit.Minute) 
     components.setValue(second, forComponent: NSCalendarUnit.Second) 
     let notifiDate = NSCalendar.currentCalendar().dateByAddingComponents(components, toDate: NSDate(), options: NSCalendarOptions(rawValue: 0))! 
     dateComp = calender?.components([.Year,.Month,.Day,.Hour,.Minute,.Second], fromDate: notifiDate) 
    } 

    let notification = UILocalNotification() 
    if isRepeate == true{ 
     notification.repeatInterval = NSCalendarUnit.WeekOfYear 
     notification.repeatCalendar = calender 
    } 
    notification.fireDate = calender?.dateFromComponents(dateComp!) 
    notification.alertBody = alertBody 
    notification.userInfo = ["day":"\(weekDay)","type":"\(type)"] 

    UIApplication.sharedApplication().scheduleLocalNotification(notification) 
}