2012-05-19 5 views
-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 
+0

Сколько времени вы нажали на кнопку, которая имеет «Eggtimer» как действие –

+0

Кнопка скрывается после первого нажатия. Затем он появляется, когда индикатор выполнения очищается после достижения 100%. Все это выглядит отлично на секунду, но затем индикатор прогресса снова начинает двигаться. Интересно, что полоса будет двигаться в два раза быстрее, если я снова нажму кнопку. – user1404611

ответ

3

Это кажется проблема,

else if (doneYet.progress=1) 

по 2 причинам:

  • оператор сравнения равенства является == и не = (которая является оператором правопреемником)
  • вы сравниваете a float номер для точного значения, это никогда не бывает хорошим, поскольку плавающие числа не точны, вы ульд проверить progress >= 1.0, в противном случае вы могли бы перейти на 1.0 (например, 1.0000001) и пропустить условие остановки

Кроме того, в состоянии остановки вы

[doneYet setProgress:doneYet.progress=0.0]; 

, но прежде он должен быть

[doneYet setProgress:0.0]; 
+0

@Jack .. он просто присваивает здесь, и я думаю, что это нормально, если вы видите, что это условие, которое сравнивает <1 –

+0

@Jack, Большое вам спасибо за ваше время на этом. Я сделал ваше предложенное изменение от <до <=, и что произошло, так это то, что индикатор прогресса достигает полной, но затем все останавливается. Действия else никогда не происходят в том, что индикатор выполнения остается полным, консоль никогда не получает строку недействительной таймера, и кнопка никогда не отображается. – 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]; 
} 

Это аннулирует старый таймер и будет только один таймер.

Смежные вопросы