iPhone iOS:本地通知未出现
Posted
技术标签:
【中文标题】iPhone iOS:本地通知未出现【英文标题】:iPhone iOS: Local Notifications Aren't Appearing 【发布时间】:2012-01-22 01:45:25 【问题描述】:我正在编写一个应用程序,当活动日期临近时,它会通过通知中心向用户发送警报。但是当我在日期选择器中设置日期并关闭应用程序时,通知不会出现。我已经在我的配置文件中启用了推送通知。可能是因为我的 objectForKey 区域。我有 2 个笔尖(一个用于 iPhone,一个用于 iPad),分别命名为 ImportDatesViewController_iPhone1 和 ImportantDatesViewController_iPad1。我应该将 objectForKey 区域更改为笔尖名称,而不仅仅是“ImportantDatesViewController”吗?而且我的 .h 和 .m 文件名也只是 ImportDatesViewController。对不起,我在这方面还是很新的,边走边学。 这是我项目中处理通知中心的所有代码,这就是我放在视图控制器中的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"mm'/'dd'/'yyyy"];
NSDate *eventDate = [[NSUserDefaults standardUserDefaults] objectForKey:@"ImportantDatesViewController.selectedDate"];
localNotif.fireDate = [eventDate dateByAddingTimeInterval:-60*60*60];
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.alertBody = @"Event coming in three days!";
localNotif.alertAction = nil;
localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.applicationIconBadgeNumber = 0;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
return YES;
我还在底部 App Delegate 的 didFinishLaunchingWithOptions 方法中添加了这段代码,我认为它可以解决问题:
[[UIApplication sharedApplication]registerForRemoteNotificationTypes:
UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeAlert |
UIRemoteNotificationTypeSound];
非常感谢任何帮助,谢谢!
【问题讨论】:
只是一个旁注,我之前发布过这个但发布不正确,我删除了之前的一个并以正确的格式发布。 iPhone Local Notifications Won't Appear 的可能重复项 【参考方案1】:您告诉它在您设置它时立即触发通知,并且您通过设置 (NOW)-60*60*60 设置它之前的一段时间。通知已经过去了。
[[UIApplication sharedApplication]presentLocalNotificationNow:localNotif];
如果您想将其设置为特定时间:
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
如果指定的值为 nil 或者是过去的日期,则立即发送通知。 作为旁注,请确保将 timeZone 和 Locale 设置为您想要的。
【讨论】:
直到你提到它,我才真正检查过它,但我的出现在那里。如果您在设备上进行测试,我看不出有任何原因。 哦,还有一件事,那么 -60*60*60 是否是尝试在用户在日期选择器上设置的日期前 60 小时发送通知的正确公式? 我不能确定,因为我经常使用 NSDateComponents 并将小时数设置为 -60。但是您的解决方案看起来也很可靠,我不能 100% 确定。有时,做同一件事的方法不止一种。 啊废话,实际上它没有工作,对不起我弄错了。我将其更改为[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
,但似乎没有什么不同。如果设备处于睡眠模式并且应用程序未运行,它仍然可以工作吗?我还用更多细节编辑了 OP。【参考方案2】:
UILocalNotifications *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil) return;
NSDate *fireTime = [[NSDate date] dateByAddingTimeInterval:900] ; //15 min
localNotif.fireDate = fireTime;
localNotif.alertBody = @"Parking your CAR 15 Minutes reached..";
// localNotif.repeatInterval=kCFCalendarUnitMinute;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
【讨论】:
【参考方案3】:这是适用于我的项目的 LocalNotification 示例代码。
AppDelegate 文件中的这个代码块:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[launchOptions valueForKey:UIApplicationLaunchOptionsLocalNotificationKey];
// Override point for customization after application launch.
return YES;
// This code block is invoked when application is in foreground (active-mode)
-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
UIAlertView *notificationAlert = [[UIAlertView alloc] initWithTitle:@"Notification" message:@"This local notification"
delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles:nil, nil];
[notificationAlert show];
// NSLog(@"didReceiveLocalNotification");
任何 ViewController 的 .m 文件中的此代码块:
-(IBAction)startLocalNotification // Bind this method to UIButton action
NSLog(@"startLocalNotification");
UILocalNotification *notification = [[UILocalNotification alloc] init];
notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:7];
notification.alertBody = @"This is local notification!";
notification.timeZone = [NSTimeZone defaultTimeZone];
notification.soundName = UILocalNotificationDefaultSoundName;
notification.applicationIconBadgeNumber = 10;
[[UIApplication sharedApplication] scheduleLocalNotification:notification];
当按下绑定“startLocalNotification”的按钮时,上面的代码会在 7 秒的时间间隔后显示一个 AlertView 如果应用程序在后台,则将 BadgeNumber 显示为 10 并带有默认通知声音。
【讨论】:
以上是关于iPhone iOS:本地通知未出现的主要内容,如果未能解决你的问题,请参考以下文章