2012-05-19 52 views
-1

我新的編程定時器無效,我一直堅持上一段時間如下:無法在iOS版

當我運行附加代碼,一切似乎都做工精細,那麼進度條開始再次計數。控制檯不斷打印無效確認字符串,但計時器似乎繼續滾動。我感謝您的幫助。

#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 
+0

你有多少次按下了有'Eggtimer'作爲動作的按鈕 –

+0

第一次按下按鈕後隱藏按鈕。然後在達到100%後清除進度條時重新顯示。這一切看起來都很好,但進度條再次開始移動。有趣的是,如果我再次按下按鈕,酒吧會移動兩倍。 – user1404611

回答

3

這似乎是一個問題

else if (doneYet.progress=1) 

原因有二:

  • 相等比較操作是==,而不是=(這是賦值運算符)
  • 您比較一個float數字的確切值,這是永遠不會好的,因爲浮動數字不準確,你sh烏爾德檢查progress >= 1.0,否則你可以去超過1.0(如1.0000001),並跳過停止條件

另外處於停車狀態,你做

[doneYet setProgress:doneYet.progress=0.0]; 

,但以前它應該是

[doneYet setProgress:0.0]; 
+0

@傑克..他只是在這裏分配,我認爲這很好,如果你看到它是如果條件比較<1 –

+0

@傑克,非常感謝你在這個時間。我把你建議的改變從<到<=,發生的事情是進度條達到飽和,但一切都停止了。其他操作永遠不會發生,進度條保持滿,控制檯永遠不會收到定時器無效的字符串,並且按鈕永遠不會被取消隱藏。 – user1404611

0

我認爲你應該這樣做,retainNSTimer對象。

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

+0

大家好,我非常抱歉地告訴你這一點,但我通過從按鈕(調用? - 我不知道適當的術語)的按鈕撤銷「First Responder」指定來解決問題startTimer。這立即糾正了它。**非常感謝您的時間和幫助!** – user1404611

-1

我的錯誤是在指定該命令startTimer所爲FirstResponder按鈕。

對於在代碼中出現錯誤而導致的錯誤,請使用您的時間和建議。

再次感謝所有提供建議的人。這對初學者來說意義重大!

+1

只需關閉此問題,而不是將任何答案... –

0

一兩件事你可以做的是改變你的startTimer所爲

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

這將作廢老定時器,只會有一個定時器。