0

我正在编写一个闹钟 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
4

1 回答 1

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 字典中的任何自定义数据。

于 2013-06-06T00:33:37.740 回答