2010-05-06 13 views

Respuesta

11

A continuación se hará lo que se necesita:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval: 2 
            target:self 
            selector:@selector(handleTimer:) 
            userInfo:nil 
            repeats:NO]; 

A continuación, la función de delegado:

-(void)handleTimer: (NSTimer *) timer 
{  
    //code 
} 
2

Debería poder establecer el NSTimeInterval en 2.0 segundos y debería disparar después de ese período de tiempo. ¿Qué estas viendo? ¿Cuál es el código que está utilizando para invocar el temporizador?

19

NSTimer se puede utilizar, pero otra opción es utilizar performSelector:withObject:afterDelay: Es básicamente como una llamada al método (envío de mensajes) que sucede más tarde.

En este ejemplo se enviará un hacerTarea: mensaje con retraso:

[self performSelector:@selector(doStuff:) withObject:self afterDelay:2]; 

lo que hace que este método para obtener invoca 2,0 segundos más tarde:

-(void)doStuff:(id)sender 
{ 
    /// do something 
} 
8

También puede utilizar un código práctico:

NSObject + PerformBlock.h

@interface NSObject (PerformBlock) 

- (void)performBlock:(void(^)(void))block waitUntilDone:(BOOL)wait; 
- (void)performBlock:(void(^)(void))block afterDelay:(NSTimeInterval)delay; 
- (void)performBlock:(void(^)(void))block repeatCount:(NSUInteger)repeatCount timeInteval:(NSTimeInterval)timeInterval; 

@end 

NSObject + PerformBlock.m

@interface NSObject (PerformBlockHidden) 

- (void)performBlock:(void(^)(void))block; 

@end 

@implementation NSObject (PerformBlock) 

- (void)performBlock:(void(^)(void))block { 
    block(); 
} 

- (void)performBlock:(void(^)(void))block waitUntilDone:(BOOL)wait { 
    [self performSelector:@selector(performBlock:) onThread:nil withObject:[[block copy] autorelease] waitUntilDone:wait]; 
} 

- (void)performBlock:(void(^)(void))block afterDelay:(NSTimeInterval)delay { 
    [self performSelector:@selector(performBlock:) withObject:[[block copy] autorelease] afterDelay:delay]; 
} 

- (void)performBlock:(void(^)(void))block repeatCount:(NSUInteger)repeatCount timeInteval:(NSTimeInterval)timeInterval { 
    for (NSInteger repetition = 0; repetition < repeatCount; repetition++) 
     [self performBlock:block afterDelay:(repetition*timeInterval)]; 
} 

@end 

A continuación, sólo importan NSObject + PerformBlock.h y llame a:

[myObject performBlock:^{ 
    // Code you want to perform after 2secs 
} afterDelay:2]; 
+0

No he utilizado esto, pero me gusta mucho la idea de utilizar bloques como éste . –