为我的应用设置下一个本地通知的最佳时间是什么?
我知道可以使用以下循环来获取通知,但是这总是按时间顺序排序,所以我可以获得item [0]的时间,还是按照添加它们的顺序?怎么可以从这个时间被拉出来?我是否需要获取完整的日期并确定时间格式,还是有更好的方法?
UIApplication *app = [UIApplication sharedApplication];
NSArray *eventArray = [app scheduledLocalNotifications];
for (int i=0; i<[eventArray count]; i++)
{
UILocalNotification* oneEvent = [eventArray objectAtIndex:i];
//oneEvent is a local notification
//get time of first one
}
非常感谢!
萨姆
答案 0 :(得分:6)
这实际上是两个问题。首先,如何获得下一个通知。第二,如何获得该通知日期的时间组成部分。
第一,sorting an array by a date property of the contained objects
NSSortDescriptor * fireDateDesc = [NSSortDescriptor sortDescriptorWithKey:@"fireDate" ascending:YES];
NSArray * notifications = [[UIApplication sharedApplication] scheduledLocalNotifications] sortedArrayUsingDescriptors:@[fireDateDesc]]
UILocalNotification * nextNote = [notifications objectAtIndex:0];
两,get just the hours and minutes from the date
NSDateComponents * comps = [[NSCalendar currentCalendar] components:(NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit)
fromDate:[notification fireDate]];
// Now you have [comps hour]; [comps minute]; [comps second];
// Or if you just need a string, use NSDateFormatter:
NSDateFormatter * formatter = [NSDateFormatter new];
[formatter setDateFormat:@"HH:mm:ss"];
NSString * timeForDisplay = [formatter stringFromDate:[notification fireDate]];
答案 1 :(得分:1)
您无法保证scheduledLocalNotifications
数组的顺序。如果您需要在应用中多次获取最新通知,建议您在UIApplication
上使用包含for
循环的方法创建实用工具类别。这样你就可以打电话:
notif = [[UIApplication sharedApplication] nextLocalNotification];
不要重复自己。