NSTimer选择器未触发

时间:2014-01-31 20:13:34

标签: objective-c nstimer

是的,还有其他问题,但是我找不到答案,所以我也问了。这是我的代码:

#pragma mark - Timer methods

- (void)counter
{
    self.seconds++;
    double time = self.seconds;
    NSLog(@"seconds = %f", time);
}

- (void)startTimer
{
    self.seconds = 0;

    self.timer = [NSTimer scheduledTimerWithTimeInterval:1.0
                                                  target:self
                                                selector:@selector(counter)
                                                userInfo:nil
                                                 repeats:YES];
}

- (void)stopTimer:(CaptureTimeType)timerType
{
    [self.timer invalidate];
    self.timer = nil;
}

我经历了一个教程,这段代码可以在一个项目中运行。但是当我将它添加到我的“真实”项目中时,选择器(计数器)永远不会被执行。有没有人知道为什么这个代码可以在一个项目中工作而不在另一个项目中?因为我很困惑。

谢谢你, 露

行。这是调用它的代码。它属于同一类,据我所知,它在同一个线程中:

- (void)generateImage:(cv::Mat)src
{
    [self startTimer];
    ph::ImageProcessor newImage = *([self.processor generateImage:src]);
    [self stopTimer:TEMPLATE];
}

这有帮助吗?

再次感谢。

2 个答案:

答案 0 :(得分:1)

你的

  

ph :: ImageProcessor newImage = *([self.processor generateImage:src]);

呼叫占用主线程,因此您的时间不会收到更新。

要解决此问题,您可以

在后台运行处理器(您可以使用dispatch_async)

或者,如果您只想记录功能的时间,则应该这样做:

- (void)generateImage:(cv::Mat)src
{
    NSDate * date = [NSDate date];
    ph::ImageProcessor newImage = *([self.processor generateImage:src]);
    float timePassed = -[date timeIntervalSinceNow];
}

答案 1 :(得分:0)

请参阅How do I use NSTimer?

简而言之:触发计时器时调用的方法需要特殊签名

-(void)methodName:(NSTimer*)timer

因此启动计时器的调用如下:

[NSTimer scheduledTimerWithTimeInterval:1.0
                                              target:self
                                            selector:@selector(methodName:)
                                            userInfo:nil
                                             repeats:YES];