我在一个长期存在的应用中实现了本地通知。该应用程序每天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中,我需要区分哪个Local Notification已被触发,因为我不想每小时调用一次deleteStuffFromY昨天 - 每天只调用一次。
如何在我的应用代理代码中区分这些预定的本地通知?
答案 0 :(得分:4)
您可以使用userInfo
属性为此存储NSDictionary
。
存储信息:
localNotification.userInfo = @{ @"myCustomType" : @"heartbeat" };
检索信息:
NSString *myCustomType = localNotification.userInfo[@"myCustomType"];