2016-04-10 2 views
0

Необходимо отправить напоминание каждый день в установленное время. Время устанавливается в формате от 1 до 24 часов с использованием UIStepper. Модифицированные код, но он по-прежнему не работает, НЕ ПРИХОДЯТ УВЕДОМЛЕНИЯВремя UILocalNotification с использованием UIStepper

var hour = 0.0 
let notification = UILocalNotification() 
@IBOutlet weak var remindStepper: UIStepper! 
@IBOutlet weak var remindLabel: UILabel! 
@IBOutlet weak var remindSwitch: UISwitch! 

в viewDidLoad()

remindStepper.wraps = true 
remindStepper.value = hour 
remindStepper.minimumValue = 0 
remindStepper.maximumValue = 24 
if NSUserDefaults.standardUserDefaults().objectForKey("hour") != nil { hour = NSUserDefaults.standardUserDefaults().objectForKey("hour") as! Double } 

if NSUserDefaults.standardUserDefaults().objectForKey("remindOnOff") != nil { remindOnOff = NSUserDefaults.standardUserDefaults().objectForKey("remindOnOff") as! Bool 
} 
    if remindOnOff == true { 
     remindSwitch.on = true 
    } else { 
     remindSwitch.on = false 
    } 
    remindLabel.text = "\(Int(hour)):00" 

Затем создайте

func setEveryDayNotification(){ 

    let calendar = NSCalendar.currentCalendar() 
    var dateFire = NSDate() 
    let components = calendar.components(.Hour,fromDate: dateFire) 
    components.calendar = calendar 
    components.hour = Int(hour) 
    dateFire = calendar.dateFromComponents(components)! 

    notification.alertTitle = "alert title" 
    notification.alertBody = "alert body" 
    notification.soundName = UILocalNotificationDefaultSoundName 
    notification.alertAction = "Run the workout" 
    notification.timeZone = NSTimeZone.defaultTimeZone() 
    notification.fireDate = components.date 
    notification.repeatInterval = NSCalendarUnit.Day 
    UIApplication.sharedApplication().scheduleLocalNotification(notification) 
} 
@IBAction func remindStepper(sender: UIStepper) { 
    NSUserDefaults.standardUserDefaults().setObject(Int(sender.value), forKey: "hour") 
    NSUserDefaults.standardUserDefaults().synchronize() 
    remindLabel.text = "\(Int(sender.value).description):00" 
    UIApplication.sharedApplication().cancelLocalNotification(notification) 
    remindOnOff = false 
    remindSwitch.on = false 
    NSUserDefaults.standardUserDefaults().setBool(remindOnOff, forKey: "remindOnOff") 
} 
    @IBAction func remindSwitch(sender: UISwitch) { 
    if remindSwitch.on { 
     setEveryDayNotification() 
     remindOnOff = true 
     NSUserDefaults.standardUserDefaults().setBool(remindOnOff, forKey: "remindOnOff") 
    } else { 
     remindOnOff = false 
     UIApplication.sharedApplication().cancelLocalNotification(notification) 
     NSUserDefaults.standardUserDefaults().setBool(remindOnOff, forKey: "remindOnOff") 
    } 

} 

ответ

0

Ваш текущий код меняется год 0000 так ваше уведомление не установлено в соответствующее время

Вы можете проверить следующий код, заменить текущий Код

let calendar = NSCalendar.currentCalendar() 
    var dateFire = NSDate() 
    let components = calendar.components(.Hour,fromDate: dateFire) 
    components.calendar = calendar 
    components.hour = Int(hour) 
    dateFire = calendar.dateFromComponents(components)! 

на код ниже

let calendar = NSCalendar.currentCalendar() 
calendar.timeZone = NSTimeZone.localTimeZone() 
let dateFire = NSDate() 
let newDate = calendar.dateBySettingHour(Int(hour), minute:00, second:00, ofDate: dateFire, options:NSCalendarOptions()) 

И в момент оповещения о пожаре данных сделать это как этот

notification.fireDate = newDate 

Если вы поместите этот код локальный уведомление должно быть установлено

Примечание: В соответствии с вашим текущим кодом вы вызываете setEveryDayNotification при каждом изменении значения шага, чтобы он устанавливал уведомление для каждого часа на основе значения шага, вместо этого вы должны сделать отдельную кнопку, которая может получить текущее значение шага и установить уведомление для текущий выбранный час только.

+0

Вы можете помочь мне реализовать свою задачу правильно? Спасибо –

+0

@ArturSkachkov вы пробовали код, который я написал, что должно вам помочь? – HardikDG

+0

уведомление срабатывает один раз. дополнительно измените значение часа и ничего не получится :( –

Смежные вопросы