2014-12-10 3 views
1

Почему он не отображает уведомление после нажатия кнопки?Не получать уведомления от LocalNotification.fireDate

Если fireDate был NSDate(timeIntervalSinceNow: 10) он будет работать нормально

Как я могу получать уведомления из массива?

@IBAction func buttonPressed(sender: AnyObject) { 

    var stringDate = dateFormatter.stringFromDate(timePicker.date) 
    alarmArray.append(stringDate) 

    let fixedAlarmArray = alarmArray 
    NSUserDefaults.standardUserDefaults().setObject(fixedAlarmArray, forKey: "alarmArray") 
    NSUserDefaults.standardUserDefaults().synchronize() 


    //Local Notification 
    var localNotification:UILocalNotification = UILocalNotification() 
    localNotification.alertAction = "Go to app" 
    localNotification.alertBody = "Its Time!" 
    localNotification.fireDate = timePicker.date 
    localNotification.timeZone = NSTimeZone.defaultTimeZone() 
    UIApplication.sharedApplication().scheduleLocalNotification(localNotification) 

    self.view.endEditing(true) 

} 

ответ

0

даты, указанной в fireDate интерпретируется в соответствии со значением этого свойства. Если вы укажете nil (по умолчанию), дата пожара будет интерпретирована как абсолютное время по Гринвичу, что подходит для таких случаев, как в качестве таймеров обратного отсчета. Если вы назначаете действительный объект NSTimeZone этому свойству , дата огня интерпретируется как время настенных часов, которое автоматически корректируется при изменении часовых поясов; пример , подходящий для этого случая, является будильником.

localNotification.fireDate = timePicker.date 
localNotification.timeZone = NSTimeZone.defaultTimeZone() 
// the problem is here, you are setting the timezone after inputing your date 

вы должны использовать localtimeZone и установить его перед установкой fireDate

localNotification.timeZone = NSTimeZone.localTimeZone() 
localNotification.fireDate = timePicker.date 

Примечание:

В прошивке 8 и более поздние версии приложения, которые используют локальные или удаленные уведомления должны регистрировать типы уведомлений, которые они намерены доставить. Затем система дает пользователю возможность ограничить типы уведомлений о вашем приложении . Система не значки значка, отображает предупреждающие сообщения или воспроизводит предупреждающие звуки, если какой-либо из этих типов уведомлений не включен для вашего приложения, даже если они являются , указанными в полезной нагрузке уведомления.

сделать так:

UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Badge | UIUserNotificationType.Sound | UIUserNotificationType.Alert, categories: nil)) 

создать расширение для объединения время определена с 0 секунд следующим образом:

extension NSDate { 

    var day:   Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitDay,   fromDate: self).day   } 
    var month:   Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitMonth,   fromDate: self).month   } 
    var year:   Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitYear,   fromDate: self).year   } 
    var minute:   Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitMinute,  fromDate: self).minute } 
    var hour:   Int { return NSCalendar.currentCalendar().components(NSCalendarUnit.CalendarUnitHour,   fromDate: self).hour } 

    var fireDate: NSDate { 
     return NSCalendar.currentCalendar().dateWithEra(1, year: year, month: month, day: day, hour: hour, minute: minute, second: 0, nanosecond: 0)! 
    } 
} 

затем просто использовать его следующим образом:

localNotification.fireDate = timePicker.date.fireDate 
+0

Типы уведомлений уже зарегистрированы, а для режима выбора даты установлено значение Не время. Он работает, если fireDate установлен на определенный интервал, но не используется при выборе времени. Вопрос в том, как правильно использовать его с таймером. – Amur

+0

Я обновил ответ. Проблема в том, что вы устанавливаете часовой пояс после установки firedate. –

+0

На самом деле это не повлияло, но я понял, что получаю уведомления только не в точную минуту, секунды спустя, в зависимости от того, что я получил доступ к таймеру, который он начнет отсчитывать с этой секунды. – Amur