本地通知不会被解雇

时间:2015-10-31 13:23:03

标签: ios swift notifications uilocalnotification

我正在尝试使用本地通知,这是我的代码:

的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”

我正在为friends数组中的每个朋友调用setNotification函数。如果只有一两个朋友,我会收到通知,但有一个有~100 +我不再收到通知。

我知道fireDate是正确的,我查了一下。

为什么代码不起作用?

2 个答案:

答案 0 :(得分:3)

设备上的每个应用仅限于64个预定的本地通知。系统会丢弃超出此限制的预定通知,仅保留最快发送的64个通知。重复通知被视为单个通知。

You can find more detail here

答案 1 :(得分:1)

看起来您确实超出了通知限制。有几个提示和指南可能会有所帮助:

  1. 尝试检查您的dateNSDate(),并仅在date.timeIntervalSinceReferenceDate > NSDate().timeIntervalSinceReferenceDate compare中有NSDate方法时安排通知,但我更愿意进行比较原始价值)
  2. 逐个调度本地通知对于应用程序性能而言非常昂贵,因此您可以形成一组通知并一次安排所有通知。为此目的使用UIApplication.sharedApplication().scheduledLocalNotifications属性。
  3. 这将允许您在每次启动应用程序时有效地重新安排所有通知。例如,在applicationDidFinishLaunching()委托方法中。
  4. 此外,这将为您带来另一个好处:您可以轻松检查通知限制,并在必要时添加/替换第64个通知,并提示用户启动您的应用以允许其安排更多通知。这是许多应用程序处理Apple限制的常见做法。