2015-10-31 4 views
2

Я пытаюсь использовать местное уведомление, это мой код:Местное Уведомление Не розжига

AppDelegate

application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: [UIUserNotificationType.Sound, UIUserNotificationType.Alert, UIUserNotificationType.Badge], categories: nil))  

notificationViewController

let localNotification:UILocalNotification = UILocalNotification() 

var BDate = friend.birthday.componentsSeparatedByString("/") 

let date = NSDate.date(year: 2015, month: Int(BDate[1])!, day: Int(BDate[0])! - daysBefore, hour: hour, minute: min, second: 0) 
localNotification.soundName = "notificationSound.mp3" 

localNotification.alertBody = friend.fullName + " has a birthday today!" 

localNotification.fireDate = date 
localNotification.timeZone = NSTimeZone.localTimeZone() 
localNotification.repeatInterval = NSCalendarUnit.Year 

UIApplication.sharedApplication().scheduleLocalNotification(localNotification)  

friend.birthday является строкой - «DD/MM/YYYY»

Я звоню функция setNotification для каждого друга в массиве друзей. Когда есть только один или два друга, я получаю уведомление, но есть ~ 100 +, я больше не получаю уведомление.

Я знаю, что fireDate верен, я проверил его.

Почему код не работает?

+0

'год: 2014' ?? –

+0

исправлено, все еще не работает – OmerN

+0

Вы проверили дату огня, которую вы настраиваете? – Wain

ответ

3

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

You can find more detail here

1

Похоже, вы действительно превысили уведомления ограничить. Там в несколько советов и рекомендаций, которые могут помочь:

  1. Попробуйте проверить ваш date против NSDate() и уведомления по расписанию, только если date.timeIntervalSinceReferenceDate > NSDate().timeIntervalSinceReferenceDate (Существует compare метод NSDate, но я предпочитаю, чтобы сравнить исходные значения)
  2. Планирование местного уведомления один за другим очень дороги для производительности приложения, поэтому вы можете сформировать массив уведомлений и запланировать их все сразу. Используйте для этого UIApplication.sharedApplication().scheduledLocalNotifications.
  3. Это позволит вам эффективно перенести все уведомления при каждом запуске приложения. Например, в методе делегата applicationDidFinishLaunching().
  4. А также это даст вам еще одно преимущество: вы можете легко проверить лимит уведомлений и, при необходимости, добавить/заменить 64-е уведомление, предложив пользователю запустить приложение, чтобы он мог планировать больше уведомлений. Это распространенная практика для многих приложений, связанных с ограничениями Apple.
Смежные вопросы