Как запланировать локальное уведомление, если действие не было выполнено? - PullRequest
0 голосов
/ 18 февраля 2012

Я бы хотел запланировать локальное уведомление на 7:00 каждый день, если выполняется определенное условие (пользователь не вводил ежедневные данные).

Как мне это сделать?

Ответы [ 2 ]

1 голос
/ 18 февраля 2012

Просто разбейте его на 3 случая:

  1. Это до 7 вечера, а пользователь еще не ввел свои ежедневные данные еще
  2. Это до 7 вечераи пользователь ввел свои ежедневные данные
  3. Это уже после 7 вечера
1013 *

В случае 1 вы настроили уведомление на отключение в 19:00 сегодня , а затем повторяйте каждый день.

В случаях 2 и 3 вы устанавливаете уведомление, чтобы оно срабатывало в 7 вечера завтра , а затем повторялось каждый день.

Код для создания и планирования уведомления выглядит следующим образом:

UILocalNotification *dailyNotification = [[UILocalNotification alloc] init];
dailyNotification.fireDate = nextReminderTime; // set this to 7pm today or tomorrow
dailyNotification.timeZone = [NSTimeZone defaultTimeZone]; 
dailyNotification.repeatInterval = NSDayCalendarUnit;
dailyNotification.soundName = UILocalNotificationDefaultSoundName;
dailyNotification.alertBody = @"You need to enter data for today.";

Конечно, если вы настроили оповещение на 7 вечера сегодня, то пользователь откроет приложение и введет данные до 7 вечера,Уведомление на сегодня должно быть отменено.

В качестве альтернативы (это то, что я делал в аналогичной ситуации), вы можете отменить все уведомления с помощью [[UIApplication sharedApplication] cancelAllLocalNotifications]; и настроить их заново с нуля в зависимости от состояния приложения каждый раз, когда приложение собирается войти вфон (например, в UIApplication applicationDidEnterBackground:. Это проще, так как вам не нужно думать о том, какие уведомления вы настроили раньше.

1 голос
/ 18 февраля 2012

Планирование локальных уведомлений в iOS довольно просто - у Apple есть хороший пример того, как это сделать: https://developer.apple.com/library/mac/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW13

Я предполагаю, что критерий "ввода ежедневных данных" имеет место в вашем приложении, верно? Если это так, то вы будете просто планировать локальные уведомления на 7 вечера каждый день, а затем, если пользователь вводит ежедневные данные, вы просто отмените уведомление на этот день. Я обнаружил, что планирование локальных уведомлений немного сложновато, поэтому я, вероятно, cancelAllLocalNotifications и затем перенесу их все.

Имейте в виду, что приложения ограничены возможностью иметь только 64 запланированных локальных уведомления одновременно. Таким образом, теоретически вы можете запланировать 64 дня в будущем (так как у вас есть только одно уведомление в день). Я бы с осторожностью отнесся к этому, поскольку это может действительно раздражать пользователей. Возможно, я бы делал это только в течение нескольких дней или недели, поскольку, если они не открывают приложение после нескольких напоминаний, они могут потерять интерес.

...