【问题标题】:NSTimer is not getting stoppedNSTimer 没有停止
【发布时间】:2011-08-04 12:36:42
【问题描述】:

我正在尝试停止计时器。我的问题是当我尝试停止计时器时,计时器的值为 nil 并且它没有失效。除了这个还有什么方法可以停止计时器?

我的代码是这样的

定时器在头文件中定义 - 并且也是合成的。

if([str_Message isEqualToString:ON] // if the command to start timer

{


 if(!timer) 

{

tmr_CallWebService = [[NSTimer scheduledTimerWithTimeInterval:Time_TracingInterval target:ClassTracing selector:@selector(startLocationTracing) userInfo:nil repeats:YES]retain];

}

//to stop timer

else if([str_Message isEqualToString:OFF])
{
if(timer)

{

[timer invalidate];
timer = nil;

}

请帮帮我...提前谢谢

【问题讨论】:

  • 你在哪里设置定时器?是否保留?
  • @progrmr 我忘了写.. 我刚刚编辑了我的代码。
  • 但是你从哪里开始你的计时器呢?也许您只是想将tmr_CallWebService 重命名为timer

标签: iphone objective-c ios4 iphone-sdk-3.0 nstimer


【解决方案1】:

我认为您只需将tmr_CallWebService 替换为timer

【讨论】:

    【解决方案2】:

    [str_Message isEqualToString:ON] 应该是这样的[str_Message isEqualToString:@"ON"]。与OFF比较类似。使用@"OFF"

    【讨论】:

    • 这不是问题,因为条件正在变为真......但计时器值为 nil 是问题所在。当收到关闭命令时
    • 好吧,如果ON被声明为NSString* ON = @"ON";并且类似地关闭,这部分就没有问题了。
    • @iPhone Fun:OFFON 是否定义为常量?
    • 那么如果你在计时器上有一个retain属性,那么使用getter方法来使其无效。
    • @evan 是的,这些是字符串常量
    【解决方案3】:

    如果你为定时器声明了一个属性,你应该使用它。例如,如果您的计时器被定义为@property (nonatomic, retain) NSTimer *myTimer;,您应该将其称为 self.myTimer 并使用该设置器设置它,然后使用访问器使其无效。

    您似乎没有在任何地方将 tmr_CallWebService 设置为您的计时器 ivar,因此您只是在泄漏并丢失参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-30
      • 2010-11-05
      • 2015-12-08
      • 2011-03-31
      • 1970-01-01
      相关资源
      最近更新 更多