2010-11-22 3 views
0

comment puis-je arrêter NSTimer dans runTime?NSTimer s'arrêtant dans l'exécution?

J'utilise le code suivant .mais NSTimer exécute à nouveau et encore (je veux répéter NSTimer, je veux arrêter l'exécution)

- (void)TimerCallback 
    { 

    ..... 
    [self.tim invalidate]; 
     self.tim = nil; 

} 


-(void)timerStart 
{ 


    self.tim = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(TimerCallback) userInfo:nil repeats:YES]; 

} 
+0

Je suppose que vous faites correctement, ne sais pas pourquoi NSTimer ne se termine pas un message invalidate .. est « tim » conformément aux définitions à retenir? ou copier? tout en déclarant la propriété – Sanniv

+0

j'ai défini comme conserver dans la propriété .. Je dois attribuer une copie? –

Répondre

2
  1. Il est répète. NON si vous Je veux qu'il ne fonctionne qu'une seule fois. Vous avez des répétitions: OUI.

  2. Il est [invalidate tim] et pas self.tim invalident

  3. Do pas do self.tim = nul, car ce qui est de la diffuser. invalider fait tout. Pour mémoire, assurez-vous que votre propriété est correcte, par exemple
    @property (nonatomic, retain) NSTimer * happyTimer;
    et
    @synthesize happyTimer;

  4. Pour l'enregistrement, vous devez être sur le même sujet.

Espérons que cela aide.

Voici toutes les lignes de coupe de code à partir d'un exemple de production: travail

NSTimer *ttt; 
@property (nonatomic, retain) NSTimer *ttt; 
@synthesize ttt; 
self.ttt = [NSTimer scheduledTimerWithTimeInterval:7.00 
    target:self selector:@selector(ringBell) userInfo:nil repeats:YES]; 
if ([ttt isValid]) 
    [ttt invalidate]; 
[ttt release]; // in dealloc 

Vous devez ajouter quelques lignes de débogage NSLog (@ « Je viens invalidés »); et ainsi de suite, pour vous assurer que vous n'avez pas d'erreur de base.

+0

Salut, je veux des répétitions: OUI ... J'ai suivi les instructions que vous avez dites, mais la minuterie est toujours en cours ... –

+0

A propos du point 2; les deux font la même chose. À propos du point 3; self.tim attribue la minuterie à zéro. Si c'est (retient) libère la mémoire, si c'est (assigner) c'est déjà libéré. Dans les deux cas, c'est OK. – seppo0010

0

Votre code semble correct. Habituellement, ce problème commence deux fois le minuteur. Vous pouvez



-(void)timerStart { 
    [self.tim invalidate]; 
    self.tim = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(TimerCallback) userInfo:nil repeats:YES]; 

}