Question

Je suis en train d'exécuter le code ci-dessous, mais il continue de verrouillage mon simulateur après la « Tick » est écrit à la console. Il produit jamais « Tock » donc je suppose qu'il doit faire avec la ligne « NSTimeInterval elapsedTime = [startTime timeIntervalSinceNow]; » Les IBactions sont activés par des boutons. minuterie et startTime sont définis dans le .h comme NSTimer et NSDate respectivement.

Quelqu'un peut-il me dire ce que je fais mal?

code:

- (IBAction)startStopwatch:(id)sender
{
    startTime = [NSDate date];
    NSLog(@"%@", startTime);
    timer = [NSTimer scheduledTimerWithTimeInterval:1 //0.02
                                             target:self
                                           selector:@selector(tick:)
                                           userInfo:nil
                                            repeats:YES];
}

- (IBAction)stopStopwatch:(id)sender
{
    [timer invalidate];
    timer = nil;
}

- (void)tick:(NSTimer *)theTimer
{
    NSLog(@"Tick!");
    NSTimeInterval elapsedTime = [startTime timeIntervalSinceNow];
    NSLog(@"Tock!");
    NSLog(@"Delta: %d", elapsedTime);
}

Je suit dans le .h:

@interface MainViewController : UIViewController <FlipsideViewControllerDelegate> {

    NSTimer *timer;
    NSDate *startTime;
}


- (IBAction)startStopwatch:(id)sender;
- (IBAction)stopStopwatch:(id)sender;
- (void)tick:(NSTimer *)theTimer;

@property(nonatomic, retain) NSTimer *timer;
@property(nonatomic, retain) NSDate *startTime;

@end
Était-ce utile?

La solution

Si vous avez:

startTime = [NSDate date];

Vous avez besoin:

startTime = [[NSDate date] retain];

Tout ce qui est créé avec à une alloc, nouvelle, init sera publié automatiquement (en règle générale). Alors qu'est-ce qui se passe est que vous créez le NSDate, l'assigner à startTime, il devient auto-publié (détruit), alors vous essayez d'appeler timeIntervalSinceNow sur un objet qui a été entièrement libéré de sorte qu'il explose.

Ajout Retain a augmenté le nombre de retenir de sorte qu'il colle toujours autour après la libération automatique. Ne pas oublier de libérer manuellement lorsque vous avez terminé avec elle si!

Autres conseils

Pour profiter du @property que vous devez faire:    self.startTime = [date NSDate]

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top