iOS: компоненты даты, чтобы игнорировать год - PullRequest
1 голос
/ 23 января 2012

Я написал приложение, позволяющее пользователю вводить дату в окне выбора даты, и они нажимают кнопку, чтобы запланировать локальное уведомление за 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];

}

Ответы [ 2 ]

1 голос
/ 25 января 2012

По запросу:

Что если вы просто проигнорируете введенный год и замените его текущим годом?

0 голосов
/ 24 января 2012

вы можете просто получить текущий год и установить его в dateComps

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit fromDate:[NSDate date]];
[dateComps setYear:[components year]];

РЕДАКТИРОВАТЬ:

NSDateComponents *dateComps = [[NSDateComponents alloc] init];
[dateComps setDay:[dateComponents day]];
[dateComps setMonth:[dateComponents month]];

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit fromDate:[NSDate date]];
[dateComps setYear:[components year]];

[dateComps setHour:13];
[dateComps setMinute:30];
[dateComps setSecond:[timeComponents second]];
NSDate *itemDate = [calendar dateFromComponents:dateComps];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...