Установите NSTimer
, который запускает селектор каждые 30 секунд (или любую необходимую степень детализации):
[NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(timerFired:) userInfo:nil repeats:YES];
Селектор (метод) -timerFired:
будет запускаться каждые тридцать секунд и проверять часовой, минутный и второй компоненты, вызывая уведомление, если элементы соответствуют требуемому времени:
- (void) timerFired:(NSNotification *)notification {
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSCalendarUnit unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDate *date = [NSDate date];
NSDateComponents *dateComponents = [calendar components:unitFlags fromDate:date];
NSInteger hour = [dateComponents hour];
NSInteger min = [dateComponents minute];
NSInteger sec = [dateComponents second];
if ((hour == kDesiredHour) && (min == kDesiredMinute) && (sec == kDesiredSecond)) {
[[NSNotificationCenter defaultCenter] postNotificationName:@"kTimeComponentsWereMatched" object:nil userInfo:nil];
}
}
Вы регистрируетесь, чтобы прослушать это уведомление в каком-то другом классе:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doSomething:) name:@"kTimeComponentsWereMatched" object:nil];
Соответственно, у вас есть метод в том же классе, который делает что-то интересное:
- (void) doSomething:(NSNotification *)notification {
// do something interesting here...
}
Вы можете объединить этот код, если он все в одном классе. Или укажите target
в NSTimer
, чтобы указать на экземпляр класса, для которого вы хотите запустить selector
in.