Использование определенного времени и дня (НЕ дата) для активации функции «если» в XCode - PullRequest
0 голосов
/ 19 февраля 2012

Сейчас я работаю над приложением потокового радио для шоу, над которым я работаю, и пока, все в порядке - потоковое вещание работает, когда вы нажимаете «Слушать вживую!»Кнопка и так как это главная цель, я счастлив.Тем не менее, я пытаюсь стать умным сейчас и настроить экранную индикацию, которая показывает, когда шоу в эфире;он включается только два часа в неделю, поэтому я подумал, что было бы неплохо показывать, когда он включается и выключается с помощью экранного дисплея в приложении.Ничего особенного ... вот что у меня на экране до сих пор:

1) Отсчитанные отсюда часы отсчета - РЕДАКТИРОВАТЬ: http://www.youtube.com/watch?v=pNVWST15pyc - это действительно просто.Не могу поверить, что я не осознавал, что изменение hh на HH делает его 24-часовым ... Боже, я такой тупой.

2) Метка, показывающая только день недели,не дата или месяц, взятые отсюда - NSCalendar для отображения дня недели - так как приложению нужно только знать, воскресенье ли это (день эфира) или нет.РЕДАКТИРОВАТЬ: Сделал эту работу правильно сейчас, потому что я идиот, который не связал его должным образом.: (

Однако я действительно хочу, чтобы приложение настроило две настройки для просмотра изображений - переключатель «в эфире» и «вне воздуха» - так, чтобы между 8 и 22 часамив воскресенье вечером он показывает изображение «в эфире», а в другое время - изображение «в эфире». Я уверен, что это утверждение if, но я не уверен, с чего начать пытаться объединитьбиты часов и дня недели, чтобы это сработало. Кто-нибудь может высказать некоторые пожелания, пожалуйста?

Кроме того, поскольку это время по Гринвичу, я хочу привязать приложение к Гринвичу независимо от того, где в мире находится пользователь, к которому это относитсяпрямо к шоу. Я предполагаю, что смогу сделать это, используя бит timeZone: nil кода часов, изменив бит «nil» на «Europe / London», но это просто делает все это захватывающим образом.(Я пробовал это в различных формах, но безуспешно.) Опять же, предложения будут в высшей степени признательны.

Извинения за то, что задали простые вопросы - за исключением некоторых прелюбодеяний.Я изучаю курсы по Xcode, я немного новичок.: D

1 Ответ

1 голос
/ 19 февраля 2012

Вы должны использовать объект NSDateComponents, у которого есть метод экземпляра -weekday (1 - воскресенье для григорианского календаря).Подробная информация о том, как начать работу, содержится в Руководстве по программированию даты и времени от Apple .Вот пример кода, который относится к тому, что вы пытаетесь сделать:

NSDate *today = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc]
                     initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *weekdayComponents =
                [gregorian components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];
NSInteger day = [weekdayComponents day];
NSInteger weekday = [weekdayComponents weekday];

NSDateComponents также позволит вам получить и установить (с помощью так называемых методов доступа) часы, минуты, секунды и часовой пояс.

Для проблемы, которую вы описали выше, я написал бы такой метод:

- (BOOL)isShowOnAir {
    BOOL onAir = NO;

    NSDate *now = [NSDate date];
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    NSDateComponents *components = [gregorian components:(NSWeekdayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSTimeZoneCalendarUnit) fromDate:now];
    [components setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    NSInteger day = [components day]; // Sunday == 1
    if (day == 1) {
        NSInteger hour = [components hour];
        //NSInteger minute = [components minute]; -- not used but here's how to access it
        if (hour == 20 || hour == 21) { // covers 8:00 - 9:59 PM
            onAir = YES;
        }
    }
    return onAir;
}
...