Хорошо, вот код, который поможет вам в правильном направлении:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [gregorian components:NSWeekdayCalendarUnit|NSYearCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit fromDate:[NSDate date]];
// this will set the weekday to sunday
[components setWeekday:1];
// this is a new date on sunday
NSDate * newDate = [gregorian dateFromComponents:components];
Вам все еще нужно выяснить, была ли новая дата в прошлом, чтобы она не сработала.
На самом деле ваш код готов:
// ... init code ...
// *** this the important date ***
localNotif.fireDate = dateOnASunday;
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.repeatCalendar = NSWeekCalendarUnit;
... // add body etc. ...
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
[localNotif release];
Создайте метод вокруг этого фрагмента и передайте дату с параметром, чтобы вы могли использовать его повторно. Вам нужно только указать дату, которая должна быть первой датой стрельбы, и она будет повторяться каждую неделю. Вам просто нужно записаться на свидание в воскресенье или среду.
Вы устанавливаете интервал повторения следующим образом:
// repeats notification on a weekly basis
localNotif.repeatCalendar = NSWeekCalendarUnit;
Свойство repeatCalender имеет тип NSCalendarUnit , который является перечислением.