2014-11-10 3 views
0

Мне нужно иметь логику в нашем приложении, которая позволяет определять повторяющиеся события (например, каждый вторник, каждый каждый месяц), которые затем приводят к определенному действию в приложении.Архитектурная проблема: дизайн повторяющихся событий

Я думал UILocalNotification бы хорошая идея, но с этим классом я отправить уведомление также к пользователю, и я хочу, чтобы обработать событие тольков приложении (если приложение не в сети, то может быть в следующий раз приложение вверх)

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

Большое спасибо за любые предложения

ответ

0

Вы определенно хотите использовать UILocalNotification в вашей ситуации, она будет полностью удовлетворять потребности, которые вы описали.

Поскольку вы сказали, что событие должно срабатывать только при активном приложении (на переднем плане), вам нужно будет добавить некоторую пользовательскую логику, чтобы это произошло, но это не очень сложная задача, и у вас есть несколько вариантов Вот.

Что я предлагаю, так это то, что вы используете жизненный цикл приложения методов вашего AppDelegate, чтобы запланировать и удалить ваши уведомления, когда это уместно.

Протокол UIApplicationDelegate содержит два соответствующих метода для вашего случая (на самом деле немного больше, но эти два будут выполнять эту работу для вас ...). Сначала у нас есть applicationWillEnterBackground:, здесь вы должны удалить все текущие запланированные уведомления. В методе applicationDidBecomeActive: вы можете перепланировать уведомления, так как этот вызов вызывается каждый раз, когда ваше приложение снова появляется на переднем плане.

Дайте мне знать, если у вас есть дополнительные вопросы:

+0

Большое спасибо за ваш ответ. Правильно ли я понял, что это будет означать, что всякий раз, когда приложение становится активным, я пересматриваю все существующие уведомления (будет от 20 до 50 разных расписаний, которые были введены один раз) и удалите их, когда приложение перестанет активно? (As Я очень ценю ваш ответ, у меня как-то была надежда на более легкое решение) – Red

+0

Ну, в идеале вы инкапсулируете логику (пере) рассылать уведомления в выделенный класс (например, «NotificationManager»). Таким образом, вам нужно только реализовать логику один раз, а затем просто повторно использовать экземпляр этого класса в вашем приложении AppDelegate. это должно быть только одним вызовом метода в «applicationWillEnterBackground:» и «applicationDidBecomeActive:», что-то вроде '[notificationManager scheduleNotifications]' и '[notificationManager removeNotifications]' – nburk

+0

'NotificationManager' - это класс, который всегда знает, сколько уведомлений запланировано, и когда их планировать, ваш 'AppDelegate' только вызывает свои методы – nburk