2012-02-02 77 views
0

三个月来,我无法完成这项工作。我需要帮助。我被卡住了,浪费时间。我很难解释这一点。无论如何,我在这里有这个代码。如何检测每分钟更换一次的时钟?

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"); 
+0

要么你简单地认为':00'则将秒“真”,或者您有“记忆”的旧值,要知道是否新的价值已经“跨越”了一个小小的界限。 – 2012-02-02 03:11:39

+0

你如何定义微小的变化?当分钟值变化时? – futureelite7 2012-02-02 03:26:07

回答

1

如果您需要某种确切的结构,我的答案可能根本无法帮到您。否则,如果您只需要每分钟执行一段代码,则可以尝试使用NSTimer类,this post是有关如何使用它的说明的重要来源。

您只需拨打- (id)initWithFireDate:(NSDate *)date interval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats(表格NSTimer),并按照您的要求进行调整即可。希望这有帮助,祝你好运!

编辑:

那么你将没有明确“检测分钟”,回调会回应的每一分钟,在这个回调你有你的代码做任何你想做的事情。你只需要在零秒的时间内用一分钟的时间激发你的方法。

+0

我已经有了NSTimer。但你是否发现改变分钟? – 2012-02-02 03:24:05

+0

因为评论很长,我删除了它们,并将它们放入一个答案中,而不是为了便于阅读。 – gamozzii 2012-02-02 03:40:43

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"); 
}