2014-10-30 3 views
-1

Я ищу, чтобы добавить функцию напоминания в мое приложение, используя UILocalNotification, но существует ограничение только на 64 зарегистрированных уведомления, и с моим приложением я подсчитал, что пользователи могут выйти за пределы этого предела.Как получить список NSDates в течение следующих 3 месяцев, которые совпадают в среду?

Поэтому я теперь смотрю на запись настроек напоминаний пользователей и создание очереди будущих уведомлений, хранящихся в основных данных.

Каждый раз, когда приложение запущено было бы проверить, сколько Уведомления регистрируются UILocalNotification и если число < 40 будет выделять следующие 24 запланированных уведомлений от основных данных к началу его обратно до 64.

В настоящее время я изо всех сил пытаюсь определить точные даты, которые могут произойти между нынешними и последующими 3 месяцами, и меня интересуют только даты, которые являются выбранным днем, то есть средой.

Заранее спасибо.

Аарон

+3

Так что же, у вас есть вопрос, или вы хотите нам взглянуть на документацию для NSCalendar и NSDateComponents и сказать вам, что он говорит? –

+1

Использовать метод 'NSCalendar'' dateByAddingComponents: toDate: options: 'для получения следующего' NSDate' и повторять до тех пор, пока у вас не будет желаемого количества новых дат. – Rob

ответ

1

Благодаря другим для удара мне нужно прочитать документацию Вот что я в конечном итоге делает с небольшой помощью.

// Current Date + Time given for initial reminder 
NSString *[email protected]"28-10-2014 2:15:00 PM"; 

int dayOfWeekToRemind = 4; // Wednesday 

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setTimeZone:[NSTimeZone systemTimeZone]]; 
[formatter setDateFormat:@"dd-MM-yyyy h:mm:ss a"]; 


// Convert to NSDate 
NSDate *alarmDate = [formatter dateFromString:sDateGiven]; 

NSCalendar *calendar = [NSCalendar currentCalendar]; 



// Now we need to work out Next Wednesday 
NSDateComponents *componentsForFireDate1 = [calendar components:(NSYearCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit| NSSecondCalendarUnit | NSWeekdayCalendarUnit | NSWeekOfYearCalendarUnit) fromDate: alarmDate]; 

[componentsForFireDate1 setWeekday: dayOfWeekToRemind] ; // Set to Wednesday 

// Check if the date given is before or after wednesday as we are only interested in future Wednesdays 

if ([componentsForFireDate1 weekday] > dayOfWeekToRemind) { 
    // If greater we add a week 
    [componentsForFireDate1 setWeekOfYear: [componentsForFireDate1 weekOfYear] + 1]; 
} 

// Now we have the very first start date for the next Wednesday 
alarmDate = [calendar dateFromComponents:componentsForFireDate1]; 

int i = 0; 

// Loop through 30 weeks 
for (i = 0; i < 30; i++) { 

    NSDateComponents *componentsForFireDate = [[NSDateComponents alloc] init]; 

    [componentsForFireDate setWeekday: 7] ; // Add 7 days 

    alarmDate = [calendar dateByAddingComponents:componentsForFireDate toDate:alarmDate options:0]; 
    NSLog(@"Date = %@", alarmDate); 
} 

Затем затем выводит следующее:

Given Date Date 2014-10-28 14:15:00 +0000 
ADJUST DATED 2014-10-29 14:15:00 +0000 
Date = 2014-11-05 14:15:00 +0000 
Date = 2014-11-12 14:15:00 +0000 
Date = 2014-11-19 14:15:00 +0000 
Date = 2014-11-26 14:15:00 +0000 
Date = 2014-12-03 14:15:00 +0000 
Date = 2014-12-10 14:15:00 +0000 
Date = 2014-12-17 14:15:00 +0000 
Date = 2014-12-24 14:15:00 +0000 
Date = 2014-12-31 14:15:00 +0000 
Смежные вопросы