-1

私はプログラミングが初めてで、次のことでしばらく立ち往生しています。

添付のコードを実行すると、すべて正常に動作しているように見えますが、進行状況バーが再びカウントアップを開始します。コンソールは無効化の確認文字列を出力し続けますが、タイマーは回転し続けているようです。私はあなたの助けに感謝します。

#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

4 に答える 4

3

これは問題のようです

else if (doneYet.progress=1) 

理由は 2 つあります。

  • 等値比較演算子 is ==and not =(代入演算子)
  • 数値を正確な値で比較していますfloat。浮動小数点数は正確ではないため、これは決して適切ではありませんprogress >= 1.0

また停止状態にする

[doneYet setProgress:doneYet.progress=0.0];

しかし、以前はそうあるべきだった

[doneYet setProgress:0.0];
于 2012-05-19T03:32:59.223 に答える
0

私はあなたがこれをすべきだと思いますretainNSTimerオブジェクト。

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

于 2012-05-19T03:51:58.607 に答える
0

できることの1つは、startTimerを次のように変更することです

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

これにより、古いタイマーが無効になり、タイマーが 1 つだけになります。

于 2012-05-19T19:45:50.163 に答える
-1

私の間違いは、startTimer を FirstResponder として命令するボタンを指定することでした。

コードにないエラーの結果であった何かについて、あなたの時間とアドバイスを使用して申し訳ありません。

アドバイスを提供してくれたすべての人に改めて感謝します。それは初心者にとって大きな意味があります!

于 2012-05-19T18:34:08.257 に答える