Понимание единиц NSCalendar (пожалуйста, объясните мне, как будто мне было пять лет) - PullRequest
2 голосов
/ 16 сентября 2011

Я пытаюсь выяснить, как запустить локальное уведомление в определенные дни.

Я должен использовать единицы календаря, но объяснения, которые я нашел о них, - вонючая часть.Не могли бы вы, ребята, объяснить мне, как если бы мне было пять лет, какие интервалы они представляют?

Я заполнил те, которые, как мне кажется, я знаю, исправьте меня, если я ошибаюсь, и заполните остальные.

NSEraCalendarUnit = ????? era? 
NSYearCalendarUnit = event will repeat once in a year at the same month, day and hour
NSMonthCalendarUnit = event will repeat once a month at the same day and hour
NSDayCalendarUnit = event will repeat every day at the same hour
NSHourCalendarUnit = event will repeat every hour at the same minute
NSMinuteCalendarUnit = event will repeat every minute at the same second
NSSecondCalendarUnit = event will repeat every second
NSWeekCalendarUnit = event will repeat the same day of week every week 
NSWeekdayCalendarUnit = ?????? can I make it repeat just specific days? I mean, monday to friday but not saturday and sunday?
NSWeekdayOrdinalCalendarUnit = ????? how do I use that?
NSQuarterCalendarUnit = when exactly will it repeat? every 3 months?
NSCalendarCalendarUnit = ?????????
NSTimeZoneCalendarUnit = ????????

это пример того, что мне нужно сделать:

UILocalNotification* alarm = [[[UILocalNotification alloc] init] autorelease];
if (alarm)
{
    alarm.fireDate = aDate;
    alarm.timeZone = [NSTimeZone systemTimeZone];
    alarm.repeatInterval = WHAT DO I PUT HERE? TO MAKE IT REPEAT JUST SATURDAYS AND SUNDAYS?;
    alarm.soundName = @"alarm.caf";
    alarm.alertBody = @"hi there";
    [app scheduleLocalNotification:alarm];
}

Мне нужно запрограммировать локальные уведомления в одной из следующих возможностей:

  • для запускакаждый день с понедельника по пятницу, кроме субботы и воскресенья
  • , чтобы стрелять каждую субботу и воскресенье, и нет другого дня
  • , чтобы повторять каждую неделю в один и тот же день недели

Какие значения я должен использовать для repeatInterval для достижения этой цели?

спасибо

Ответы [ 3 ]

2 голосов
/ 16 сентября 2011

Я верю, что то, что вы хотите, не может быть сделано. Этот вопрос может дать более подробную информацию.

Конечно, вы можете сделать два отдельных локальных уведомления, каждое из которых должно повторяться еженедельно, одно срабатывает по субботам, а другое по воскресеньям.

0 голосов
/ 28 апреля 2013

В: запускать каждый день с понедельника по пятницу, кроме субботы и воскресенья.

A: просто получите пять экземпляров UILocalNotification и установите их срабатывание с понедельника по пятницу (год, месяц, день для огня свободныдо тех пор, пока день недели - то, что вы хотите.

0 голосов
/ 16 сентября 2011

Вы делаете это неправильно, я верю.

Вот что я бы сказал пятилетнему ребенку (хотя, если он сможет понять obj / c в 5, я найму его быстро).

Чего ты хочешь достичь?Вы хотите включить будильник или выполнить определенные действия в определенные дни недели?

Он, вероятно, скажет: «Я не знаю», но здесь вы действительно хотите выполнить определенные действия в субботу ивоскресенья.

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

NSTimer* aTimer = [[NSTimer alloc] initWithFireDate:[NSDate date] 
                                                   interval:3600*24 // every 24 hours for example 
                                                     target:self 
                                                   selector:@selector(onTimerTriggered:) 
                                                   userInfo:nil 
                                                    repeats:YES];

Теперь вам нужно проверить, какой у нас день недели.Самое главное, что это делается отдельно.

- (void)onTimerTriggered:(id)sender
{
    // Create your calendar (gregorian is what you need)
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    // Create your components specified to only keep track of the week day of today
    NSDateComponents *weekdayComponents = [gregorian components:NSWeekdayCalendarUnit fromDate:[NSDate date]];

    // now you know which day we are !! (careful in the US, sunday is first day of the week)
    int weekday = [weekdayComponents weekday];

    // trigger alarm if needed
    if (weekday == 3 || weekday == 5) // wednesday or saturday
    { ... } // trigger your alarm instantly or wait until a specific hour it's up to you
}

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

  1. Проверьте, какой это день недели
  2. Действие!

NS--CalendarUnitиспользуется только для разложения конкретной даты на то, что Apple называет NSDateComponents, но это определенно способ решения проблемы разложения дат Apple, и он не написан на стали для других языков.

...