Как отличить локальные уведомления

Я реализовал локальные уведомления в долгоживущем приложении. Приложение работает 24 часа в сутки в режиме киоска. Одно из локальных уведомлений срабатывает один раз в день, а другое - один раз в час. Уведомление, которое срабатывает один раз в день, удаляет всю информацию локальных основных данных за предыдущий день. Уведомление, которое срабатывает один раз в час, является «пульсом» для приложения и создает регистрацию на сервере один раз в час.

Вот график почасового сердцебиения (он находится в моем основном контроллере просмотра):

- (void)scheduleHeartBeat
{
[[UIApplication sharedApplication] cancelAllLocalNotifications];

UILocalNotification *heartbeat = [[UILocalNotification alloc] init];

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];

components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]];

NSInteger day = [components day];
NSInteger month = [components month];
NSInteger year = [components year];

[components setDay: day];
[components setMonth: month];
[components setYear: year];
[components setHour: 00];
[components setMinute: 10];
[components setSecond: 0];
[calendar setTimeZone: [NSTimeZone systemTimeZone]];
NSDate *dateToFire = [calendar dateFromComponents:components];

heartbeat.fireDate = dateToFire;
heartbeat.timeZone = [NSTimeZone systemTimeZone];
heartbeat.repeatInterval = NSHourCalendarUnit;

[[UIApplication sharedApplication] scheduleLocalNotification:heartbeat];
}

Я вызываю указанный выше метод в viewDidLoad.

Тогда в моем AppDelegate у меня есть следующее:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{   
application.applicationIconBadgeNumber = 0;
[[OLEngine myEngine] deleteStuffFromYesterday:@"MyObject"];

}

В didReceiveLocalNotification мне нужно различать, какое локальное уведомление было запущено, потому что я не хочу вызывать метод deleteStuffFromYesterday каждый час - только один раз в день.

Как я могу различать эти запланированные локальные уведомления в моем коде делегата приложения?


person motionpotion    schedule 25.06.2013    source источник


Ответы (1)


Вы можете использовать свойство userInfo, чтобы сохранить для этого NSDictionary.

Сохраните информацию:

localNotification.userInfo = @{ @"myCustomType" : @"heartbeat" };

Получить информацию:

NSString *myCustomType = localNotification.userInfo[@"myCustomType"];
person Karl    schedule 25.06.2013
comment
У вас есть пример такого с уведомлениями? - person motionpotion; 25.06.2013
comment
Просто добавил код. Это просто словарь, который должен быть вам знаком. - person Karl; 25.06.2013