Iphone NSTimer未按预期运行

Iphone NSTimer未按预期运行,iphone,objective-c,ios,nstimer,Iphone,Objective C,Ios,Nstimer,我希望这是一个简单的解决办法,你告诉我 我有一个类型为NSTimer的IVAR*类计时器。执行iAction时,将调用包含以下代码的方法: if (timer) timer = nil; timer = [NSTimer timerWithTimeInterval:0.2 target:self selector:@selector(removeOverlay) userInfo:nil repeats:NO]; 在同一个类中,我有一个方法: - (void)removeOverlay { .

我希望这是一个简单的解决办法,你告诉我

我有一个类型为NSTimer的IVAR*类计时器。执行iAction时,将调用包含以下代码的方法:

if (timer) timer = nil;
timer = [NSTimer timerWithTimeInterval:0.2 target:self selector:@selector(removeOverlay) userInfo:nil repeats:NO];
在同一个类中,我有一个方法:

- (void)removeOverlay {
...
}
在0.2秒的时间间隔后不会触发

你知道这里有什么问题吗?

你需要

 [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
计时器通过将调用放置在运行循环中的适当点来工作。

您需要

 [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];

计时器通过将调用放置在运行循环中的适当点来工作。

如果它只被调用一次,我将使用
[self-performSelector:@selector(removeOverlay)afterDelay:(您想延迟的秒数使用方法removeOverlay)]

如果只调用一次,我会使用
[self-performSelector:@selector(removeOverlay)afterDelay:(要延迟的秒数)使用方法removeOverlay]

  • 确保同时未释放
    NSTimer
    实例的
    timer
  • removeOverlay
    看起来像是更新了一些UI。让舒尔成为您在主线程上调用的产品
  • removeLayout
    方法中放置一个断点,查看它是否触发
  • 您没有安排计时器。将
    timerWithTimeInterval
    替换为
    scheduledTimerWithTimeInterval
  • 要在主线程上执行代码(允许UI更新):

    更多关于

  • 确保同时未释放
    NSTimer
    实例的
    timer
  • removeOverlay
    看起来像是更新了一些UI。让舒尔成为您在主线程上调用的产品
  • removeLayout
    方法中放置一个断点,查看它是否触发
  • 您没有安排计时器。将
    timerWithTimeInterval
    替换为
    scheduledTimerWithTimeInterval
  • 要在主线程上执行代码(允许UI更新):


    关于

    的更多信息,因为没有人提到它,将计时器添加到运行循环的另一种方法是使用fire方法:

    [timer fire];
    

    因为没有人提到它,所以将计时器添加到运行循环的替代方法是使用fire方法:

    [timer fire];
    


    被多次调用而不是一次?它只被多次调用而不是一次调用?它只被一次调用它做UI,但是我知道它没有被调用是因为NSLogI改进了答案。“您没有安排计时器。请将timerWithTimeInterval替换为scheduledTimerWithTimeInterval”它确实执行UI,但是我知道它没有被调用,因为NSLogI改进了答案。“您没有计划计时器。请将timerWithTimeInterval替换为scheduledTimerWithTimeInterval”嗯,我以前用过,没有问题,也没有问题NSRunLoop@EliGregory-您可能使用了
    scheduledTimer…
    hm我以前使用过它们,没有问题,也没有问题NSRunLoop@EliGregory-您可能使用了
    scheduledTimer…
    哪个类包含该方法?它似乎不是UIViewController类,因为我无法调用它。它实际上是一个UIViewControlleri。它是否已弃用?当我试图运行它时,被抛出了一个错误。(如果是,那就太棒了,我想它有很多用途)什么类包含这个方法?它似乎不是UIViewController类,因为我无法调用它。它实际上是一个UIViewControlleri。它是否已弃用?当我试图运行它时,被抛出了一个错误。(如果是的话,那就太棒了,我想它有很多用途)我也试过这个,文档声称这会引起额外的火灾,而不是时间的真正开始。我还没有在文档中读到任何这方面的内容。如果您使用scheduledTimerWithTimerInterval创建计时器,则可能会发生额外的火灾。我也尝试过此方法,文档声称这会导致额外火灾,而不是时间的实际开始。我没有阅读文档中的任何内容。如果您使用scheduledTimerWithTimerInterval创建计时器,则可能火灾是额外的。