你如何检测每分钟变化的时钟?

时间:2012-02-02 03:07:00

标签: iphone nsdate nstimer

三个月我无法完成这项工作。我需要帮助。我被困住了,浪费时间。我很难解释这一点。无论如何,我在这里有这个代码。

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 个答案:

答案 0 :(得分:1)

如果你需要具有这种确切结构的东西,我的回答可能对你没有任何帮助。否则,如果您只需每分钟执行一段代码,则可以尝试使用NSTimer类,this post是描述如何使用它的绝佳来源。

你所要做的只是打电话给- (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats(从NSTimer课程开始)并按照你想要的方式进行。希望这有帮助,祝你好运!

编辑:

嗯,你不会明确地“检测分钟”,回调会每分钟响应,在这个回调中你会让你的代码做你想做的任何事情。你只需要在一分钟内用零秒启动你的方法。

答案 1 :(得分:1)

听起来你正在寻找'实时'机制。甚至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");
}