Запланированные локальные уведомления и изменения часового пояса в iOS

У меня есть этот метод в моем приложении для запуска запланированных локальных уведомлений:

- (void)scheduleNotificationForTime:(long long)atTime
{
   NSDate *fireDate = [DatesMngr getDateFromLongLong:atTime];

   UILocalNotification *localNotif = [[UILocalNotification alloc] init];
   if (localNotif == nil)
       return;
   localNotif.fireDate = fireDate;
   localNotif.timeZone = [NSTimeZone localTimeZone];

   localNotif.alertBody = @"Active Status";
   localNotif.alertAction = @"View Details";
   localNotif.applicationIconBadgeNumber = 1;

   [[UIApplication sharedApplication] cancelAllLocalNotifications];
   [[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
}

Он отлично работает, если пользователь не меняет свой часовой пояс в настройках своего устройства, но уведомление не запускается, если он меняет часовой пояс после того, как он уже был запланирован, но еще не запущен. Я также пробовал с [NSTimeZone defaultTimeZone] безуспешно. Есть ли способ обнаружить эти изменения часового пояса и обновить fireDate для уже запланированных локальных уведомлений?

Спасибо


person AppsDev    schedule 07.07.2014    source источник


Ответы (1)


Вы можете сделать это двумя способами

  1. реализовать следующий метод в вашем appdelegate
  • (void)applicationSignificantTimeChange:(UIApplication *)приложение

2 . Зарегистрируйтесь на UIApplicationSignificantTimeChangeNotification в центре уведомлений

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleTimeChange:)];

person jailani    schedule 07.07.2014
comment
Спасибо, но это будет работать только в том случае, если после изменения часового пояса в настройках устройства приложение снова станет активным, и я получу уже запланированное локальное уведомление и переустановлю его timeZone, верно? Что, если пользователь просто изменит часовой пояс и не откроет приложение снова до того времени, когда я хочу, чтобы уведомление было запущено? - person AppsDev; 07.07.2014