设置 UILocalNotification 的 fireDate

Posted

技术标签:

【中文标题】设置 UILocalNotification 的 fireDate【英文标题】:set fireDate of UILocalNotification 【发布时间】:2013-03-11 14:37:24 【问题描述】:

我正在使用这个应用程序 here 它适用于我,但我想手动插入本地通知的 fireDate 而不是使用 datePicker。

notif.fireDate = [datePicker date];

如何手动插入日期(日、月、年、小时和分钟)?

我尝试了以下

NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setDay:10];
[dateComps setMonth:3];
[dateComps setYear:2013];
[dateComps setHour:4];
[dateComps setMinute:45];
NSDate *itemDate = [calendar dateFromComponents:dateComps];

int minutesBefore = 2;
notif.fireDate = [itemDate addTimeInterval:-(minutesBefore*60)];

但它不适用于我。

提前致谢。

【问题讨论】:

创建NSDate 的实例并使用它? 你能告诉我怎么做吗?我是新来的。 嗯,你试过什么? 我编辑了我的问题。 【参考方案1】:

使用NSDateFormatter,您可以直接从NSString 转换为NSDate。这是一个例子:

NSDateFormatter* myFormatter = [[NSDateFormatter alloc] init];
[myFormatter setDateFormat:@"MM/dd/yyyy"];
NSDate* myDate = [myFormatter dateFromString:@"8/26/2012"];
NSLog(@"%@", myDate);  

编辑 如果你也想要时间

NSString *str =@"3/15/2012 9:15 PM";
NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"MM/dd/yyyy hh:mm a"];
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
[formatter setTimeZone:gmt];
NSDate *date = [formatter dateFromString:str];

NSLog(@"%@",date);  

点击此链接了解更多信息SO Answer

对于 localNotification,也只需在触发日期之后实施此操作

UIApplication *app=[UIApplication sharedApplication];
[app scheduleLocalNotification:localNotification];

【讨论】:

我也想设置小时和分钟。 它对我有用,我发现我忘了评论这一行:[[UIApplication sharedApplication] cancelAllLocalNotifications]; .. 对不起。感谢您的帮助:) 此行将取消您之前的所有通知【参考方案2】:

addTimeInterval怎么样?

UILocalNotification *localNotif = [[UILocalNotification alloc] init];
localNotif.fireDate = [itemDate addTimeInterval:-(minutesBefore*60)]; 

 //minutesBefore will be type of int and itemDate would be of NSDate type.

更新 1:

经过一番搜索,我发现 addTimeIntervalios 4 及以后版本中已被弃用。相反,您应该使用dateByAddingTimeInterval

 localNotif.fireDate = [itemDate dateByAddingTimeInterval:-(minutesBefore*60)]; 

dateByAddingTimeInterval 提供负值将在提前分钟向itemDate 发送通知。

【讨论】:

我在您进行编辑之前发布了解决方案。但我想Rajneesh071 已经为您的查询提供了完美的解决方案。

以上是关于设置 UILocalNotification 的 fireDate的主要内容,如果未能解决你的问题,请参考以下文章

更改已设置 UILocalNotification 的 soundName

如何设置 UILocalNotification 连续 30 天

在 UILocalNotification 中播放录制的音频

是否可以为 UILocalNotification 设置有条件的“firedate”?

在特定日期重复 UILocalNotification

UILocalNotification 触发日期计算