iOS — UILocalNotification — может планировать только до 64 слотов в данный момент времени

Обзор

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

Проблема

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

Вопрос

  1. Есть ли решение этой проблемы?
  2. могу ли я выполнить часть кода (домашнее хозяйство) в определенное время?
  3. есть ли работа для этого?

person user1046037    schedule 14.05.2012    source источник
comment
Не уверен, что вам это все еще нужно. Как насчет управления массивом запланированных уведомлений? Таким образом, вы можете проверить, когда в этом массиве действительно есть место. Или вы можете очистить первый элемент в массиве, когда он заполнится, и ваше приложение по-прежнему будет помечать его как что-то, за чем нужно следить.   -  person Michael    schedule 14.06.2012
comment
спасибо, Майкл, ты в порядке, я могу проверить, есть ли место в массиве, а затем запланировать любые ожидающие уведомления. Но я могу сделать это ТОЛЬКО, когда приложение открыто. Поэтому, если пользователь не решит открыть приложение, я не смогу проверить, есть ли место.   -  person user1046037    schedule 14.06.2012
comment
Лучшее, что я мог придумать, это создать базу данных и хранить все ожидающие уведомления. Когда пользователь открывает приложение, приложение проверяет, когда это возможно (после удаления/после запуска уведомления), может ли оно запланировать некоторые ожидающие уведомления. Опять же, когда приложение не открыто, ничего нельзя сделать. Также необходимо тщательно проверить, можете ли вы запланировать уведомление перед созданием записи, в противном случае лучше сообщить пользователю, что ему может потребоваться открывать приложение каждый раз, когда уведомление срабатывает, чтобы вы, когда уведомление срабатывает, и приложение открывается для выполнения вашего кода.   -  person user1046037    schedule 14.06.2012


Ответы (1)


Возможно, вы не захотите сигнализировать пользователю о наличии проблемы, а просто сделаете это в фоновом режиме. Если у пользователя есть 64 уведомления для одного приложения и он не открывал приложение, то, вероятно, он не использует это приложение. После того, как уведомление сработало, оно больше не находится в массиве. Таким образом, у вас будет место каждый раз, когда срабатывает уведомление. Однако они остаются в центре уведомлений, который вы должны очистить самостоятельно.

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

Думал, что сделаю пост на случай, если вы захотите принять ответ.

Удачи.

person Michael    schedule 18.06.2012
comment
Спасибо, Майкл за этот совет, да, я полагаю, то, что вы сказали, имеет смысл, если пользователь не открывает приложение, это, вероятно, означает, что он больше его не использует. Когда неповторяющееся уведомление запускается автоматически, оно удаляется из [[UIApplication sharedApplication] запланированных локальных уведомлений], поэтому я думаю, что не требуется очищать их вручную. Я пытаюсь запланировать любые ожидающие уведомления, когда слоты доступны. - person user1046037; 19.06.2012