无法在iOS中使计时器无效

时间:2012-05-19 03:23:56

标签: ios timer invalidation

我是编程的新手,我已经在以下问题上坚持了一段时间:

当我运行附加代码时,一切似乎都正常,然后进度条再次开始计数。控制台继续打印失效确认字符串,但计时器似乎继续滚动。感谢您的帮助。

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController
@synthesize doneYet;
@synthesize cooking;
@synthesize hidebutton;

- (void)viewDidLoad;
{
    [super viewDidLoad];
    [doneYet setProgress:doneYet.progress=0.0];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
    [self setDoneYet:nil];
    [self setHidebutton:nil];
    [self setCooking:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

-(void)startTimer
{CurrentTimer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFired) userInfo:Nil repeats:YES];}

-(void)timerFired

{ if (doneYet.progress<1) {

    [doneYet setProgress:doneYet.progress+0.1];
}

else if (doneYet.progress=1) 

{
    (void) [CurrentTimer invalidate];
    NSLog(@"invalidated CurrentTimer");
    hidebutton.hidden = FALSE;
    cooking.hidden = TRUE;
    [doneYet setProgress:doneYet.progress=0.0];
}
}


- (IBAction)Eggtimer:(id)sender 
{   
    [self startTimer];
    hidebutton.hidden = TRUE;
    cooking.hidden = FALSE;
    ;}    

@end 

4 个答案:

答案 0 :(得分:3)

这似乎是一个问题

else if (doneYet.progress=1) 

有两个原因:

  • 等式比较运算符为==而非=(为赋值运算符)
  • 你正在比较一个确切值的float数字,这永远不会好,因为浮点数不准确,你应该检查progress >= 1.0,否则你可以超过1.0(例如1.0000001)和跳过停止条件

此外,在停止条件下,您可以

[doneYet setProgress:doneYet.progress=0.0];

但以前它应该是

[doneYet setProgress:0.0];

答案 1 :(得分:0)

我认为你应该这样做,retain NSTimer对象。

CurrentTimer=[[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFired) userInfo:Nil repeats:YES] retain];

答案 2 :(得分:0)

您可以做的一件事是将startTimer更改为

-(void)startTimer
{
    [CurrentTimer invalidate];
    CurrentTimer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerFired) userInfo:Nil repeats:YES];
}

这将使旧计时器无效,并且只有一个计时器。

答案 3 :(得分:-1)

我的错误在于指定将startTimer命令为FirstResponder的按钮。

很抱歉对代码中没有错误的结果使用您的时间和建议。

再次感谢所有提出建议的人。这对初学者来说意义重大!

相关问题