我的应用程序中有一个通知系统,允许用户设置多个通知,它们可以是:
前两个可以,但是第三个我有问题。
假设我们在三月,用户将通知设置为在当月31日触发。通知已正确安排,但例如,如果我们在4月(30天)在哪里,通知将在5月1日安排。
我有两个问题:
调度多个通知对我来说不是一个选择,因为苹果有一个限制,并且如果用户有6个每月通知(6x12)并且他们可以拥有更多通知,则可以轻松达到该限制。
谢谢,
塞尔吉奥
编辑
抱歉,我没有正确解释自己。
我在正确的日期设置通知没有问题。但是我对重复的工作方式有疑问。如果我将通知设置为从3月31日开始的每个月的31日触发(假设我们在3月),那么第一个通知将在正确的日期出现,但是4月会发生什么呢?
再次感谢。
最佳答案
您可以使用以下方法获取特定日期的月份的最后一天
-(NSDate*)lastDayOfMonthOfDate:(NSDate *)date
{
NSInteger dayCount = [self numberOfDaysInMonthCountForDate:date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]];
NSDateComponents *comp = [calendar components:
NSYearCalendarUnit |
NSMonthCalendarUnit |
NSDayCalendarUnit fromDate:date];
[comp setDay:dayCount];
return [calendar dateFromComponents:comp];
}
-(NSInteger)numberOfDaysInMonthCountForDate:(NSDate *)date
{
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithName:TIMEZONE]];
NSRange dayRange = [calendar rangeOfUnit:NSDayCalendarUnit
inUnit:NSMonthCalendarUnit
forDate:date];
return dayRange.length;
}
从这些方法中查找最后一天,并安排当天的通知
资料来源:Getting the last day of a month