获取下一个iOS本地通知的时间

时间:2013-07-14 17:12:44

标签: ios objective-c uilocalnotification

为我的应用设置下一个本地通知的最佳时间是什么?

我知道可以使用以下循环来获取通知,但是这总是按时间顺序排序,所以我可以获得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
}

非常感谢!

萨姆

2 个答案:

答案 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];

不要重复自己。