UILocalNotification 不会触发

Posted

技术标签:

【中文标题】UILocalNotification 不会触发【英文标题】:UILocalNotification won't fire 【发布时间】:2013-06-06 00:27:53 【问题描述】:

我正在编写一个闹钟 ios 应用程序。这是我第一次使用 UILocalNotification。我从日期选择器中获取日期。我已经格式化了日期以检查我的函数是否通过了正确的日期,它是。我检查了 UILocalNotification 所需的所有属性,我拥有了所有属性,但我的通知仍然不会触发。关于为什么的任何想法?谢谢您的帮助。

#import "BIDAlarmViewController.h"

@interface BIDAlarmViewController () 

@end

@implementation BIDAlarmViewController

@synthesize datePicker; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) 
    // Custom initialization
    return self;


- (void)viewDidLoad

[super viewDidLoad];
// Do any additional setup after loading the view from its nib




- (void)didReceiveMemoryWarning

[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.


-(IBAction)setReminderUsingDateFromDatePicker: (id)sender

[self scheduleNotificationForDate: datePicker.date];

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd 'at' HH:mm"];

NSString *formattedDateString = [dateFormatter stringFromDate:datePicker.date];


NSLog(@"Button Pressed.. date: %@", formattedDateString);

UIAlertView  *alert = [[UIAlertView alloc] initWithTitle:@"Alarm activated"
                                                 message:@"Alarm has been set"
                                                delegate:self cancelButtonTitle:@"OK"
                                       otherButtonTitles:nil];

[alert show];


-(void) scheduleNotificationForDate: (NSDate*)date 

UILocalNotification *alarm = [[UILocalNotification alloc] init];
if (alarm) 
    alarm.fireDate = date;
    alarm.timeZone = [NSTimeZone defaultTimeZone];
    alarm.repeatInterval = 0;
    alarm.soundName = @"alarmsound.caf";
    alarm.alertBody = @"Test message...";
    [[UIApplication sharedApplication] scheduleLocalNotification:alarm];



@end

【问题讨论】:

您是否在您的应用委托中实现了 didReceiveLocalNotification 方法? 不,我没有。我想我忽略了这一点。谢谢。 只是出于好奇,如果您没有方法接收通知,您希望如何收到通知?? 可能只是假设它会显示在通知中心 - 这是我第一次这样做时的想法:) @HotLicks 我是应用程序开发的新手。你能解释一下为什么该方法需要在应用委托中才能接收通知吗? 【参考方案1】:

http://developer.apple.com/library/ios/documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIApplicationDelegate/application:didReceiveLocalNotification:

确保您已在应用委托中实现了引用的方法,如下所示:

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
  NSLog(@"Notification fired"!);

Apple 关于实现此方法的说明:

本地通知类似于远程推送通知,但 不同之处在于它们完全按时间安排、显示和接收 相同的设备。应用程序可以创建和调度本地 通知,然后操作系统在 安排日期和时间。如果它在应用程序未交付时交付它 在前台活动,它显示一个警报,标记应用程序 图标,或播放声音——无论在 UILocalNotification 对象。如果应用程序正在运行 前景,没有警报、标记或声音;相反, application:didReceiveLocalNotification: 方法被调用,如果 委托实现它。

如果委托想要得到通知,可以实现这个方法 发生本地通知。例如,如果应用程序是 日历应用程序,它可以枚举其日历事件列表以 确定哪些到期日已过或即将到期 很快就会发生。它还可以重置应用程序图标徽章 编号,它可以访问本地通知中的任何自定义数据 对象的 userInfo 字典。

【讨论】:

这就是问题所在。感谢您的帮助。 在应用委托的函数体内有什么? 你想做什么?通常我只是弹出一个带有通知消息的 UIAlertView。不过,这真的取决于你! 不错。那正是我所想。再次感谢您的帮助!

以上是关于UILocalNotification 不会触发的主要内容,如果未能解决你的问题,请参考以下文章

UILocalNotification 在后台 10 分钟后不会触发

UILocalNotification - 在 NSDate 前 30 分钟触发

iPhone关机时的UILocalNotification

UILocalNotification 结束日期

UILocalNotification 触发日期计算

UILocalNotification 没有触发