iOS: формула для оповещений - PullRequest
0 голосов
/ 21 января 2012

Я пытаюсь написать приложение, которое отправит пользователю уведомление в Центре уведомлений за 60 часов до даты прибытия.Вот код: localNotif.fireDate = [eventDate dateByAddingTimeInterval:-60*60*60];

Мне было интересно, сработает ли формула -60*60*60, чтобы предупредить их за 60 часов до даты?Я совсем не уверен, как работает формула, я хотел бы настроить ее на предупреждение за 10 минут до даты для целей тестирования, а затем изменить ее на 60 часов после того, как я подтверждаю, что все правильно.Кто-нибудь знает формулу, чтобы использовать для них обоих?

Любая помощь очень ценится, спасибо!

1 Ответ

2 голосов
/ 22 января 2012

Грубый, но простой в коде способ - добавить / вычесть секунды из NSDate напрямую:

NSDate *hourLaterDate = [date dateByAddingTimeInterval: 60*60];
NSDate *hourEarlierDate = [date dateByAddingTimeInterval: -60*60];

. Вы можете увидеть, как это работает, зарегистрировав даты:

NSDate *now = [NSDate date];
NSDate *hourLaterDate = [now dateByAddingTimeInterval: 60*60];
NSLog(@"%@ => %@", now, hourLaterDate);

В этом подходе дата интерпретируется как количество секунд с базовой даты.Итак, внутренне это просто большое число типа double.

Утомительно кодировать, но педантично правильный способ сделать эти вычисления, интерпретируя даты как даты, выраженные в календарной системе.То же, что и в календарных расчетах:

NSDateComponents *hour = [[NSDateComponents alloc] init];
[hour setHour: 1];
NSCalendar *calendar= [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDate *hourLaterDate = [calendar dateByAddingComponents: hour 
                                                  toDate: date 
                                                 options: 0];
[hour release];
[calendar release];

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

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

...