Arrêter une NSRunLoop à partir d'une minuterie

J'ai fait un RunLoop avec une minuterie qui met à jour un label qui affiche un compte à rebours. J'ai besoin de la RunLoop de s'arrêter une fois le compte à rebours atteint zéro, pour le cas où le timer termine normalement je pourrais simplement utiliser runUntilDate, avec la date étant la date du jour + le temps du compte à rebours. Le problème, c'est lorsque l'utilisateur annule le compte à rebours à partir d'un bouton avant qu'il est fini. Je ne sais pas comment le dire à la RunLoop à arrêter le bouton annuler l'action. Voici le code pour le RunLoop:

    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:
                            [self methodSignatureForSelector:@selector(updateCountdownLabel:)]];
[invocation setTarget:self];
[invocation setSelector:@selector(updateCountdownLabel:)];
[[NSRunLoop mainRunLoop] addTimer:[NSTimer timerWithTimeInterval:1 invocation:invocation repeats:YES] forMode:NSRunLoopCommonModes];

La méthode dit juste l'étiquette de réduire de 1 à chaque tour de boucle.

Je pourrais dire sur le bouton annuler pour modifier l'étiquette à zéro, et d'avoir de l'exécution de la boucle sélecteur de vérifier si la valeur est zéro, mais le RunLoop propre sélecteur de dire stop?

cancelPerformSelector:target:argument:

cancelPerformSelectorsWithTarget:

Ces sont le plus proche que j'ai trouvé, mais ils ne semblent pas fonctionner de l'intérieur de la RunLoops propre sélecteur, ou au moins pas, de toute façon j'ai essayé.

Essentiellement, j'ai besoin d'avoir le bouton de dire la RunLoop à l'arrêt, ou en quelque sorte arrêt de la RunLoop de son propre sélecteur.

Grâce.

Un sélecteur est tout simplement le nom d'une méthode. J'ai corrigé vos usages de ce mot dans mon montage.

OriginalL'auteur Elbimio | 2011-07-08