Как вы обнаруживаете часы, которые меняются каждую минуту? - PullRequest
0 голосов
/ 02 февраля 2012

В течение трех месяцев я не могу закончить эту работу.Мне нужна помощь.Я застрял и тратить время.Мне трудно объяснить это.В любом случае, у меня есть этот код прямо здесь.

NSDateFormatter *detailsTimeFormatter = [[NSDateFormatter alloc] init];
[detailsTimeFormatter setTimeStyle:NSDateFormatterShortStyle];
NSLog(@"%@",[[detailsTimeFormatter stringFromDate:[NSDate date]] lowercaseString]);

//if (INSERT CODE HERE) {  ///<-- Detect every Hours and Minutes
//    NSLog(@"True");
//}else{ 
//    NSLog(@"False");
//}

Мне нужен код, который может обнаруживать изменения каждую минуту.

Я не уверен, как ты это делаешь.Я хотел бы привести пример.

    1:00 am     -> NSLog(@"True");
    1:00:10 am --> NSLog(@"False");
    1:00:11 am --> NSLog(@"False");
    1:00:12 am --> NSLog(@"False");
    1:00:## am --> NSLog(@"False");

    1:01 am    --> NSLog(@"True");
    1:01:01 am --> NSLog(@"False");
    1:01:02 am --> NSLog(@"False");
    1:01:03 am --> NSLog(@"False");
    1:01:## am --> NSLog(@"False");
    1:01:59 am --> NSLog(@"False");

    1:02 am    --> NSLog(@"True");
    1:02:01 am --> NSLog(@"False");
    1:02:02 am --> NSLog(@"False");
    1:02:03 am --> NSLog(@"False");
    1:02:## am --> NSLog(@"False");
    1:02:59 am --> NSLog(@"False");
    1:03 am    --> NSLog(@"True");

Ответы [ 2 ]

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

Звучит так, будто вы ищете механизм реального времени. Даже NSTimer - даже если вы можете заставить таймер запускаться ровно на минутной границе - не являются «реальным временем», они все еще только приблизительны.

Из NSTimer Doco: Таймер не является механизмом реального времени; он срабатывает только тогда, когда работает один из режимов цикла выполнения, к которому был добавлен таймер, и может проверить, прошло ли время срабатывания таймера. Из-за различных входных источников, которыми управляет типичный цикл выполнения, эффективное разрешение временного интервала для таймера ограничено порядка 50-100 миллисекунд. Если время срабатывания таймера происходит во время длинного вызова или когда цикл выполнения находится в режиме, который не контролирует таймер, таймер не срабатывает до следующей проверки цикла таймером. Следовательно, фактическое время, в которое таймер срабатывает, может быть значительным периодом времени после запланированного времени срабатывания.

При этом - вы можете запустить таймер с помощью этого метода, и он должен запуститься в определенное время, а затем включаться каждую минуту после этого («примерно так, как указано выше»).

- (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats – gamozzii 1 min ago edit 

Например:

-(void)mySetupMethod {
    NSDate *startTimeOnMinuteBoundary = ... create a date that starts on minute boundary using a date formatter ...
    NSTimer *myTimer = [[NSTimer alloc] initWithFireDate:startTimeOnMinuteBoundary target:self selector:@selector(myMinuteBoundaryFirer:) userInfo:nil repeats:TRUE;

}

-(void) myMinuteBoundaryFirer:(NSTimer *)theTimer {
     NSLog(@"This should be on a minute boundary, approximately only though because this is not a real time timer");
}
1 голос
/ 02 февраля 2012

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

Все, что вам нужно сделать, это позвонить по номеру - (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats (из класса NSTimer ) и установить его так, как вы этого хотите. Надеюсь, это поможет, удачи!

Edit:

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

...