Я написал приложение, позволяющее пользователю вводить дату в окне выбора даты, и они нажимают кнопку, чтобы запланировать локальное уведомление за 3 дня до приближения даты. Единственная проблема заключается в том, как мне отредактировать этот код, чтобы не учитывать год, в который вводит пользователь? Потому что они могут набрать что-то вроде 1980 года за год, который, очевидно, уже прошел.
Я попытался удалить [dateComps setYear:[dateComponents year]];
, но это вызвало немедленное срабатывание уведомления. Я также попытался удалить и тот, и NSYearCalendarUnit из компонентов даты, но происходит то же самое. Любая помощь высоко ценится! Вот мой код:
- (IBAction)scheduleNotifButton:(id)sender {
NSCalendar *calendar = [NSCalendar autoupdatingCurrentCalendar];
NSDate *pickerDate = [self.datePicker date];
NSDateComponents *dateComponents = [calendar components:( NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit )
fromDate:pickerDate];
NSDateComponents *timeComponents = [calendar components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit )
fromDate:pickerDate];
NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setDay:[dateComponents day]];
[dateComps setMonth:[dateComponents month]];
[dateComps setYear:[dateComponents year]];
[dateComps setHour:13];
[dateComps setMinute:30];
[dateComps setSecond:[timeComponents second]];
NSDate *itemDate = [calendar dateFromComponents:dateComps];
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil)
return;
localNotif.fireDate = itemDate;
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.alertBody = @"Event is in 3 days!";
localNotif.alertAction = nil;
localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.applicationIconBadgeNumber = 0;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
}