我安排了一个通知,并在它显示警告信息之前给它60分钟警告......
一旦我添加通知,我的App Delegate中的方法就会被调用:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
我怎么知道它会在后台显示为警告?我是否需要覆盖或使用任何其他委托方法,以确保给定具有60分钟间隔的预定警报......
- (void)scheduleNotificationWithItem:(NSDate *)item interval:(int)minutesBefore
{
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
//NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *currentDateComponents = [calendar components:( NSWeekdayCalendarUnit |
NSYearCalendarUnit | NSMonthCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSWeekCalendarUnit | NSMinuteCalendarUnit) fromDate:item];
NSLog(@"- current components year = %i , month = %i , week = % i, weekday = %i", [currentDateComponents year], [currentDateComponents month], [currentDateComponents week], [currentDateComponents weekday]);
NSLog(@"[currentDateComponents minute]: %i", [currentDateComponents minute]);
NSLog(@"[currentDateComponents hour]: %i", [currentDateComponents hour]);
NSLog(@"[currentDateComponents day]: %i", [currentDateComponents day]);
NSLog(@"[currentDateComponents week]: %i", [currentDateComponents week]);
NSLog(@"[currentDateComponents month]: %i", [currentDateComponents month]);
NSLog(@"[currentDateComponents year]: %i", [currentDateComponents year]);
[dateComps setDay: [currentDateComponents day]];
[dateComps setMonth:[currentDateComponents month]];
[dateComps setYear:[currentDateComponents year]];
[dateComps setHour:[currentDateComponents hour]];
[dateComps setMinute:[currentDateComponents minute]];
NSDate *itemDate = [calendar dateFromComponents:dateComps];
[dateComps release];
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil)
return;
localNotif.fireDate = [itemDate addTimeInterval:-(minutesBefore*60)];
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.alertBody = [NSString stringWithFormat:@"%@\n%@",
streetAddress,
stringOfWhenAuctionIsOn];
localNotif.alertAction = NSLocalizedString(@"View Details", nil);
localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.applicationIconBadgeNumber = 1;
NSDictionary *infoDict = [NSDictionary dictionaryWithObject:streetAddress
forKey:idOfStreetAlert];
localNotif.userInfo = infoDict;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
答案 0 :(得分:1)
如果通知立即出现,那么fireDate属性可能有问题。看起来您正在尝试验证发送的日期是否正确,但您还应验证该fireDate是否符合预期。
另外,你也许可以做到
localNotif.fireDate = [item dateByAddingTimeInterval:-60*minutesBefore];
达到同样的效果,不必乱用NSDateComponents
。我没有对此进行过测试,但可能会有效。
当计时器触发且您的应用未运行时会发生什么。如果应用尚未终止application:didReceiveLocalNotification:
将被调用。如果您的应用已被终止,则需要按照@Ishu的指示检查application:didFinishLaunchingWithOptions:
。我通常只是将通知传递给一个常用方法,以避免重复代码。
答案 1 :(得分:0)
没有背景的委托方法,你需要在didFinishLaunchingWithOptions中编写代码,
UILocalNotification *localNotif =
[launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if (localNotif) {
//your code
NSLog(@"Recieved Notification %@",localNotif);
}
当应用程序从后台获取通知时,它会创建您的逻辑。不要担心应用程序会收到您设置通知的通知。